home *** CD-ROM | disk | FTP | other *** search
/ CD Exchange / CD Exchange - Volume 1.iso / graphics / utils / videotracker / develop / source / vector.s < prev    next >
Text File  |  1993-08-23  |  72KB  |  3,667 lines

  1. ;rout            ;when this is off, the routine-file will be
  2.             ;assembled, on=testing
  3.             
  4. ;debug            ;when this is on, colors in the background will
  5.             ;show how much time the routine needs.
  6.  
  7.  
  8. routinemode    equ    15    ;the routinemode !
  9.  
  10.  
  11. ; the first part of the source handles the things that are necessary to
  12. ; show the picture/copper and playing of the routine.
  13. ; the part between the "***" lines is the routine-source.
  14. ; at the bottom of the file, there are the necessary incbin-files who
  15. ; are needed to test the routine.
  16. ; these are saved with "save effect" in videotracker. they are raw
  17. ; data files which can be fonts,pictures,landscapes,vectorobjects
  18. ; etcetra.
  19. ; the incbin-files are put in the "variables" table, in the routine-
  20. ; player-handler
  21. ; the place where it's done can be found by searching for "!!!"
  22.  
  23.  
  24.     opt    a+    ;devpac 3 optimize
  25.     opt    o+
  26.  
  27.     ifd    rout
  28.     
  29.     ;videotracker routine-test
  30.  
  31.     incdir    "videotracker:include/"
  32.     include    "exec/types.i"
  33.     include    "graphics/gfxbase.i"
  34.     include    "lvo/graphics_lib.i"
  35.     incdir    'videotracker:effect/'
  36.  
  37. vew_wid    equ    44
  38. vew_hgt    equ    290
  39. win_hgt    equ    117
  40. win_str    equ    $1a
  41.  
  42.     SECTION    1,CODE_C
  43. tus
  44.  
  45.     lea    var,a0            ;communication-table
  46.     move.l    #rottube,var_vec1(a0)    ;incbinfile !!!
  47.  
  48.     move.l    ($4).w,a6
  49.     sub.l    a1,a1
  50.     jsr    -$126(a6)        ;findtask
  51.     move.l    d0,curtsk
  52.     move.l    d0,a0
  53.     move.l    $b8(a0),tskpri
  54.  
  55.     lea    dosnam,a1        ;doslib openen
  56.     moveq.l    #0,d0
  57.     move.l    (4).w,a6
  58.     jsr    -408(a6)        ;openlib
  59.     move.l    d0,doslib
  60.  
  61.     bsr.s    label5            ;videotracker opstarten
  62.     
  63.     move.l    curtsk,a0
  64.     move.l    tskpri,$b8(a0)
  65.     move.l    ($4).w,a6
  66.     jsr    -$84(a6)        ;forbid
  67.  
  68.     move.l    doslib,a1
  69.     move.l    (4).w,a6
  70.     jsr    -414(a6)        ;closelib
  71.  
  72.     moveq.l    #0,d0
  73.     rts
  74.     
  75. label5
  76.     move.l    (4).w,a6        ;workbench gedoe
  77.     move.b    530(a6),ntscmode    ;50/60 hertz halen
  78.  
  79.     cmp.b    #50,ntscmode        ;ntsc ?
  80.     beq.s    str.ntsc
  81.     move.l    #vew_hgt-56,hogscr    ;set NTSC screen hight
  82. str.ntsc
  83.  
  84.     move.l    (4).w,a6        ;68030 cache off 
  85.     jsr    -120(a6)
  86.  
  87.     btst.b    #1,297(a6)
  88.     beq.s    str.nfc
  89.     lea.l    str.ft,a5
  90.     jsr    -30(a6)
  91. str.nfc
  92.     jsr    -126(a6)
  93.     bra.s    str.fc
  94.     
  95. str.ft
  96.     dc.w    $4e7a,2
  97.     bclr    #0,d0
  98.     bset    #13,d0
  99.     dc.w    $4e7b,2
  100.     rte
  101. str.fc
  102.  
  103.     lea    cprjmp,a2        ;copjmp zetten !
  104.     move.l    #cprbck-8,d0
  105.     move.w    d0,6(a2)
  106.     swap    d0
  107.     move.w    d0,2(a2)
  108.  
  109.     lea    cprbck-8,a2        ;copstr zetten !
  110.     move.l    #cpr,d0
  111.     move.w    d0,6(a2)
  112.     swap    d0
  113.     move.w    d0,2(a2)
  114.  
  115.     bsr    cprsprrem        ;sprites legen
  116.  
  117.     lea    gfxnam,a1        ;graphics lib openen
  118.     move.l    (4).w,a6
  119.     jsr    -408(a6)        ;openlib
  120.     move.l    d0,a6
  121.     move.l    d0,gfxlib
  122.     move.l    38(a6),oldcprlist
  123.  
  124.     bset    #1,$bfe001
  125.     bsr    copbuf            ;copper vullen
  126.  
  127.     bsr    sysoff
  128.  
  129. gadrun
  130.     btst    #6,($bfe001).l
  131.     bne    gadrun
  132.  
  133. scrend
  134. scrend.play
  135.     bsr    syson
  136.  
  137.     move.l    gfxlib,a1
  138.     move.l    (4).w,a6
  139.     jsr    -414(a6)        ;closelib
  140.  
  141. scrend.qb
  142.     moveq.l    #0,d0    
  143.     rts
  144.     
  145.     ;vertical blank interrupt, no blits.
  146.     ;handles counters,interlace,sprite
  147.     ;level 3
  148.  
  149. intvb
  150.     bra.s    intvb.cnt
  151.     dc.l    'VIDU'
  152.     dc.l    'LOOP'
  153. intvb.cnt
  154.     movem.l    d0-d7/a0-a6,-(sp)
  155.     lea    ($dff000).l,a6
  156.  
  157.     move.w    $01e(a6),d0
  158.     btst    #5,d0            ;vblank ?
  159.     bne.s    intvb.vb
  160.  
  161.     bra.s    intcop.end
  162.  
  163. intvb.vb
  164.     bsr    grap
  165.     bsr    palctr            ;palette zetten
  166.     bsr.s    copbuf            ;copper vullen
  167.     
  168. intvb.end
  169.     move.w    #$0020,$09c(a6)    ;vb bit wissen
  170.     movem.l    (sp)+,d0-d7/a0-a6    ;multitask uit, shit !
  171.     rte
  172.  
  173. intcop.end
  174.     movem.l    (sp)+,d0-d7/a0-a6
  175.     move.l    intvbold,-(sp)
  176.     rts
  177.  
  178.     ;transmission buffer empty routine, BLIT !
  179.     ;handles routines,animations
  180.     
  181. inttbe                    ;tbe interrupt
  182.     movem.l    d0-d7/a0-a6,-(sp)
  183.     lea    ($dff000).l,a6
  184.  
  185.     move.w    $01e(a6),d0
  186.     btst    #0,d0            ;no tbe ?
  187.     beq.s    intdskblk
  188.  
  189.  
  190.     btst    #6,($bfe001).l        ;muis ingedrukt ?
  191.     beq.s    inttbe.cop
  192.     btst    #2,($dff016).l
  193.     beq.s    inttbe.cop
  194.  
  195.     ifd    debug
  196.     move.w    #$700,$dff180
  197.     endc
  198.     
  199.     bsr    rotply            ;routineplayer BLIT !
  200.     bsr.s    copbuf            ;copper vullen
  201.  
  202.     ifd    debug
  203.     move.w    #$070,$dff180
  204.     endc
  205.     
  206. inttbe.cop
  207.  
  208. inttbe.end
  209.     move.w    #$0001,$09c(a6)
  210.     movem.l    (sp)+,d0-d7/a0-a6
  211.     rte
  212.  
  213. intdskblk
  214.     move.w    #$0001,$09c(a6)        ;be sure for no tbe handling
  215.     movem.l    (sp)+,d0-d7/a0-a6
  216.     move.l    inttbeold,-(sp)
  217.     rts
  218.  
  219.  
  220.     ;moves the copperbuffer to the copperlist
  221.     ;sort of double buffering
  222.     
  223. copbuf
  224.     movem.l    d0-d7/a0-a6,-(sp)
  225.  
  226.     lea    ($dff000).l,a6
  227.  
  228. copbuf.novb                ;copperchange overslaan
  229.     moveq.l    #0,d0
  230.     move.b    $005(a6),d0
  231.     lsl.w    #8,d0
  232.     moveq.l    #0,d1
  233.     move.b    $006(a6),d1
  234.     add.w    d1,d0
  235.  
  236.     cmp.w    #$4,d0
  237.     blt    copbuf.novb
  238.  
  239.     cmp.b    #50,ntscmode
  240.     beq.s    copbuf.pal
  241.     cmp.w    #$133-56-8,d0        ;ntsc grens
  242.     bge    copbuf.novb
  243.     bra.s    copbuf.cont
  244. copbuf.pal
  245.     cmp.w    #$133-8,d0        ;pal grens
  246.     bge    copbuf.novb
  247. copbuf.cont
  248.  
  249.     lea    gra.s,a0        ;buffer copieren
  250.     lea    cprbuf,a1
  251.  
  252.     move.w    00*4+2(a0),00*4+2(a1)
  253.     move.w    01*4+2(a0),01*4+2(a1)
  254.     move.w    02*4+2(a0),02*4+2(a1)
  255.     move.w    03*4+2(a0),03*4+2(a1)
  256.     move.w    04*4+2(a0),04*4+2(a1)
  257.     move.w    05*4+2(a0),05*4+2(a1)
  258.     move.w    06*4+2(a0),06*4+2(a1)
  259.     move.w    07*4+2(a0),07*4+2(a1)
  260.     move.w    08*4+2(a0),08*4+2(a1)
  261.     move.w    09*4+2(a0),09*4+2(a1)
  262.  
  263.     move.w    10*4+2(a0),10*4+2(a1)
  264.     move.w    11*4+2(a0),11*4+2(a1)
  265.     move.w    12*4+2(a0),12*4+2(a1)
  266.     move.w    13*4+2(a0),13*4+2(a1)
  267.     move.w    14*4+2(a0),14*4+2(a1)
  268.     move.w    15*4+2(a0),15*4+2(a1)
  269.     move.w    16*4+2(a0),16*4+2(a1)
  270.     move.w    17*4+2(a0),17*4+2(a1)
  271.     move.w    18*4+2(a0),18*4+2(a1)
  272.     move.w    19*4+2(a0),19*4+2(a1)
  273.  
  274.     move.w    20*4+2(a0),20*4+2(a1)
  275.     move.w    21*4+2(a0),21*4+2(a1)
  276.     move.w    22*4+2(a0),22*4+2(a1)
  277.     move.w    23*4+2(a0),23*4+2(a1)
  278.     move.w    24*4+2(a0),24*4+2(a1)
  279.     move.w    25*4+2(a0),25*4+2(a1)
  280.     move.w    26*4+2(a0),26*4+2(a1)
  281.     move.w    27*4+2(a0),27*4+2(a1)
  282.     move.w    28*4+2(a0),28*4+2(a1)
  283.     move.w    29*4+2(a0),29*4+2(a1)
  284.  
  285.     move.w    30*4+2(a0),30*4+2(a1)
  286.     move.w    31*4+2(a0),31*4+2(a1)
  287.     move.w    32*4+2(a0),32*4+2(a1)
  288.     move.w    33*4+2(a0),33*4+2(a1)
  289.     move.w    34*4+2(a0),34*4+2(a1)
  290.     move.w    35*4+2(a0),35*4+2(a1)
  291.     move.w    36*4+2(a0),36*4+2(a1)
  292.     move.w    37*4+2(a0),37*4+2(a1)
  293.     move.w    38*4+2(a0),38*4+2(a1)
  294.     move.w    39*4+2(a0),39*4+2(a1)
  295.  
  296.     move.w    40*4+2(a0),40*4+2(a1)
  297.     move.w    41*4+2(a0),41*4+2(a1)
  298.     move.w    42*4+2(a0),42*4+2(a1)
  299.     move.w    43*4+2(a0),43*4+2(a1)
  300.     move.w    44*4+2(a0),44*4+2(a1)
  301.     move.w    45*4+2(a0),45*4+2(a1)
  302.     move.w    46*4+2(a0),46*4+2(a1)
  303.     move.w    47*4+2(a0),47*4+2(a1)
  304.     move.w    48*4+2(a0),48*4+2(a1)
  305.     move.w    49*4+2(a0),49*4+2(a1)
  306.  
  307.     move.w    50*4+2(a0),50*4+2(a1)
  308.     move.w    51*4+2(a0),51*4+2(a1)
  309.     move.w    52*4+2(a0),52*4+2(a1)
  310.     move.w    53*4+2(a0),53*4+2(a1)
  311.     move.w    54*4+2(a0),54*4+2(a1)
  312.  
  313. copbuf.end
  314.     movem.l    (sp)+,d0-d7/a0-a6
  315.     rts
  316.  
  317.     ;goes back to the workbench
  318.     
  319. syson
  320.     movem.l    d0-d7/a0-a6,-(sp)
  321.  
  322.     move.w    #$0001,$dff09a        ;tbeint uit
  323.     move.l    intvbold,($6c).w
  324.     move.l    inttbeold,($64).w
  325.  
  326.     move.l    4,a6
  327.     jsr    -138(a6)        ;permit
  328.  
  329.     move.l    gfxlib,a6
  330.     jsr    -462(a6)        ;disownblitter
  331.  
  332.     move.l    wbview,a1
  333.     move.l    gfxlib,a6
  334.     jsr    _LVOLoadView(a6)     ; Fix view
  335.     jsr    _LVOWaitTOF(a6)
  336.     jsr    _LVOWaitTOF(a6)         ; wait for LoadView()
  337.  
  338. syson.ras
  339.     cmp.b    #$c0,$dff006        ;prevent copperjump
  340.     bne    syson.ras
  341.  
  342.     move.l    gfxlib,a6
  343.     move.l    gb_copinit(a6),$dff080     ; Kick it into life
  344.  
  345.     movem.l    (sp)+,d0-d7/a0-a6
  346.     rts
  347.     
  348.     ;goes back to the gadgetscreen
  349.     
  350. sysoff
  351.     movem.l    d0-d7/a0-a6,-(sp)
  352.      
  353.     move.l    gfxlib,a6
  354.     move.l    gb_ActiView(a6),wbview    ;current view
  355.     sub.l    a1,a1            ; clear a1
  356.     jsr     _LVOLoadView(a6)     ; Flush View to nothing
  357.     jsr    _LVOWaitTOF(a6)     ; Wait once
  358.     jsr    _LVOWaitTOF(a6)     ; Wait again.
  359.  
  360.     move.l    gfxlib,a6
  361.     jsr    -456(a6)        ;ownblitter
  362.  
  363.     move.l    4,a6
  364.     jsr    -132(a6)        ;forbid
  365.         
  366.     move.l    ($6c).w,intvbold
  367.     move.l    #intvb,($6c).w
  368.     move.l    ($64).w,inttbeold
  369.     move.l    #inttbe,($64).w
  370.     move.w    #$8001,$dff09a        ;tbeint aan
  371.     bsr    gracpr            ;reset copper
  372.     bsr    copbuf            ;copy copper
  373.     move.l    #cpr,$dff080
  374.  
  375.     movem.l    (sp)+,d0-d7/a0-a6
  376.     rts
  377.     
  378. cprsprrem
  379.     movem.l    d0-d7/a0-a6,-(sp)
  380.     lea    cprspr,a0
  381.     move.l    #sprdat,d0
  382.     move.w    #7,d1
  383. cprsprrem.a
  384.     move.w    d0,3*2(a0)
  385.     swap    d0
  386.     move.w    d0,1*2(a0)
  387.     swap    d0
  388.     add.l    #8,a0
  389.     dbra    d1,cprsprrem.a
  390.     movem.l    (sp)+,d0-d7/a0-a6
  391.     rts
  392.  
  393. varset                    ;variablen neerzetten
  394.     movem.l    d0-d7/a0-a6,-(sp)
  395.     move.l    #var,a0
  396.  
  397.     move.l    #cprbck,var_cprbck(a0)
  398.     move.l    gfxlib,var__GfxBase(a0)
  399.     move.b    ntscmode,var_ntsc(a0)
  400.  
  401.     move.l    curpic1,var_pic1(a0)    ;variabel
  402.     move.l    curpic2,var_pic2(a0)    ;variabel
  403.     move.w    anispd1,var_anispd1(a0)
  404.     move.w    anitel1,var_anitel1(a0)
  405.     movem.l    (sp)+,d0-d7/a0-a6
  406.     rts
  407.     
  408.     ;this routine handles all videotracker-routines
  409.  
  410. rotply    
  411.     movem.l    d0-d7/a0-a6,-(sp)
  412.  
  413.     moveq.l    #0,d0
  414.  
  415.     lea    currot1,a2        ;routine 1
  416.     move.w    rotinf1,d0        ;routine info
  417.     bsr.s    rotplyr
  418.  
  419. rotply.end
  420.     movem.l    (sp)+,d0-d7/a0-a6
  421.     rts
  422.  
  423.     ;this routine handles 1 routine, BLIT !
  424.     
  425. rotplyr
  426.     movem.l    d0-d7/a1-a6,-(sp)
  427.  
  428.     move.l    #rot,(a2)        ;routinestart address
  429.  
  430.     move.b    #50,ntscmode        ;ntsc/pal hz
  431.     clr.l    curpic2            ;background picture
  432.     move.w    #1,anispd1        ;animationspeed
  433.     clr.w    anitel1            ;animation position
  434.  
  435.     lea    var,a0            ;communication-table
  436.  
  437.  
  438.     move.l    #routinemode,d0        ;routinemode !!!
  439.  
  440.     sub.l    a0,a0            ;picture info legen
  441.  
  442.     tst.l    (a2)            ;is er een routine ?
  443.     beq    rotplyr.end        ;interlace handling
  444.  
  445.     move.l    intdel,d2        ;delay
  446.     move.l    inttel,d1        ;teller
  447.     cmp.w    d2,d1
  448.     blt    rotplyr.end
  449.     clr.l    inttel
  450.                 
  451.     bsr    varset            ;variabelen updaten
  452.  
  453.     move.l    (a2),a1            ;routine halen
  454.     move.l    #var,a0            ;variablen tabel
  455.  
  456.     movem.l    d3-d7/a1-a6,-(sp)
  457.     moveq.l    #0,d1            ;vars wissen
  458.     moveq.l    #0,d2
  459.     moveq.l    #0,d3
  460.     moveq.l    #0,d4
  461.     moveq.l    #0,d5
  462.     moveq.l    #0,d6
  463.     moveq.l    #0,d7
  464.     sub.l    a2,a2
  465.     sub.l    a3,a3
  466.     sub.l    a4,a4
  467.     sub.l    a5,a5
  468.  
  469.     jsr    4(a1)            ;routine afwerken
  470.     movem.l    (sp)+,d3-d7/a1-a6
  471.  
  472.     ;Routine:
  473.     ;
  474.     ;Input:
  475.     ;a0=variabelentabel
  476.     ;d0=routinemode
  477.     ;
  478.     ;Output:
  479.     ;a0=picture
  480.     ;d1=copperlist
  481.     ;d2=interruptdelay        (NOT used till now)
  482.     
  483.     move.w    #$0020,$dff09a        ;vb off !
  484.  
  485.     move.l    d2,intdel        ;delay
  486.  
  487.     lea    cprjmp,a3
  488.     move.l    #cprbck-8,d0
  489.  
  490.     cmp.l    (a2),a1            ;routine ondertussen gewipt ?
  491.     bne.s    rotplyr.nocop
  492.     tst.l    d1            ;copperlist ?
  493.     beq.s    rotplyr.nocop
  494.     move.l    d1,d0
  495. rotplyr.nocop
  496.     move.w    d0,6(a3)
  497.     swap    d0
  498.     move.w    d0,2(a3)
  499.  
  500.     cmp.l    #0,a0            ;picture ?
  501.     beq.s    rotplyr.endvb
  502.  
  503.     move.l    a0,curpic1        ;current picture (cycle)
  504.     move.l    a0,curpal1        ;current palette
  505.  
  506.     tst.b    rotdpl            ;plane is geleverd
  507.     beq.s    rotplyr.set
  508.     clr.b    rotdpl
  509.     clr.l    cycdel1            ;cycle info wissen
  510.     clr.l    4+cycdel1
  511.     clr.l    curfrm1            ;curfrm1, altijd planes zetten
  512. rotplyr.set
  513.     clr.b    dplctr
  514.     bsr.s    grap
  515.     bsr    grac            ;colorset
  516. rotplyr.endvb
  517.     move.w    #$8020,$dff09a
  518. rotplyr.end
  519.     movem.l    (sp)+,d0-d7/a1-a6
  520.     rts
  521.  
  522.     ;removes possible routine-coppers
  523.     
  524. gracpr
  525.     movem.l    d0-d7/a0-a6,-(sp)
  526.     lea    cprjmp,a3
  527.     move.l    #cprbck-8,d0        ;copperlist resetten
  528.     move.w    d0,6(a3)
  529.     swap    d0
  530.     move.w    d0,2(a3)
  531.     movem.l    (sp)+,d0-d7/a0-a6
  532.     rts
  533.  
  534.     ;picture-to-copper routine, communicates with the
  535.     ;anim-player
  536.     
  537. grap                    ;d7=anim
  538.     movem.l    d0-d7/a0-a6,-(sp)
  539.  
  540.     clr.l    d7
  541.     
  542.     tst.l    curpic1            ;current picture ?
  543.     beq    grap.end
  544.  
  545.     move.l    curpic1,a2        ;normal pic halen
  546.  
  547.     lea    gracprscr,a1        ;window neerzetten
  548.     move.l    hogscr,d1
  549.  
  550.     move.w    pic_hgt(a2),d3        ;pic hoogte
  551.     move.w    pic_vew(a2),d5
  552.     btst    #2,d5            ;interlace ?
  553.     beq.s    grap.nohi4
  554.     lsr.w    #1,d3            ;/2
  555. grap.nohi4
  556.     cmp.w    d3,d1
  557.     bge.s    grap.hog
  558.     move.w    d1,d3
  559. grap.hog
  560.     sub.w    d3,d1
  561.     lsr.w    #1,d1
  562.     add.w    #win_str,d1
  563.     move.w    d1,d2
  564.     add.w    d3,d2
  565.  
  566.  
  567.     move.b    d1,2(a1)        ;y start
  568.     move.b    d2,6(a1)        ;y end
  569.  
  570.     move.w    pic_wid(a2),d4        ;pic breedte in bytes
  571.     lsl.l    #3,d4
  572.  
  573.     move.l    #vew_wid*8,d0
  574.     move.l    #0,d1
  575.     move.l    #$71,d6
  576.  
  577.     move.w    pic_vew(a2),d5
  578.     btst    #15,d5            ;hires ?
  579.     beq.s    grap.nohi2
  580.  
  581.     move.l    #(vew_wid-4)*8*2,d0
  582.     move.l    #1,d1
  583.     move.l    #$81,d6
  584.  
  585.     cmp.w    #80,pic_wid(a2)        ;overscan ?
  586.     ble.s    grap.nohi2
  587.     move.l    #(vew_wid)*8*2,d0
  588.     move.l    #$61,d6
  589.  
  590. grap.nohi2    
  591.     btst    #6,d5            ;super hires ?
  592.     beq.s    grap.noshi2
  593.  
  594.     move.l    #(vew_wid-4)*8*4,d0
  595.     move.l    #2,d1
  596.     move.l    #$81,d6
  597.  
  598.     cmp.w    #80*2,pic_wid(a2)    ;overscan ?
  599.     ble.s    grap.noshi2
  600.     move.l    #(vew_wid)*8*4,d0
  601.     move.l    #$61,d6
  602.  
  603. grap.noshi2    
  604.  
  605.     clr.w    d5
  606.     cmp.w    d0,d4            ;breeder dan scherm ?
  607.     ble.s    grap.c
  608.     move.w    d4,d5
  609.     move.w    d0,d4
  610.     sub.w    d0,d5            ;modulo
  611.     lsr.w    #3,d5            ;/8
  612. grap.c
  613.     lsr.w    d1,d0
  614.     lsr.w    d1,d4
  615.  
  616.     move.w    d0,d2
  617.     sub.w    d4,d2
  618.     lsr.w    #1,d2            ;/2
  619.  
  620.     add.w    d6,d2
  621.     move.b    d2,3(a1)        ;x start
  622.     move.w    d2,d3            ;d3 bewaren !
  623.  
  624.     add.w    d4,d2            ;d4 bewaren !
  625.     move.b    d2,7(a1)        ;x end
  626.     
  627.     move.w    pic_vew(a2),d6
  628.     btst    #15,d6            ;hires ?
  629.     beq.s    grap.nohi5    
  630.     add.l    d4,d4            ;*2
  631. grap.nohi5
  632.     btst    #6,d6            ;super hires ?
  633.     beq.s    grap.noshi5    
  634.     add.l    d4,d4            ;*4
  635. grap.noshi5
  636.  
  637.     move.l    d7,-(sp)
  638.     move.w    pic_vew(a2),d6
  639.     move.l    #17,d0
  640.     move.l    #1,d1
  641.     move.l    #3,d7
  642.  
  643.     btst    #15,d6            ;hires ?
  644.     beq.s    grap.nohi3    
  645.     move.l    #9,d0
  646.     move.l    #2,d1
  647.     move.l    #2,d7
  648. grap.nohi3
  649.     btst    #6,d6            ;super hires ?
  650.     beq.s    grap.noshi3    
  651.     move.l    #9,d0
  652.     move.l    #2,d1
  653.     move.l    #1,d7
  654. grap.noshi3
  655.     sub.w    d0,d3
  656.     lsr.w    #1,d3
  657.     move.w    d3,10(a1)        ;ddfstrt
  658.     
  659.     move.w    d4,d2            ;pic breedte in pixels
  660.     lsr.w    #4,d2            ;/16
  661.     sub.w    d1,d2            ;-1
  662.  
  663.     lsl.w    d7,d2            ;*8
  664.     add.w    d2,d3
  665.     move.w    d3,14(a1)        ;ddfstop
  666.     move.l    (sp)+,d7
  667.     
  668.     lea    pic_raw(a2),a0
  669.  
  670.     moveq.l    #0,d2
  671.     move.w    pic_dpt(a2),d2
  672.     sub.l    #1,d2
  673.     muls    pic_wid(a2),d2
  674.     add.w    d2,d5
  675.  
  676.     move.w    pic_vew(a2),d2        ;viewmode add
  677.     btst    #2,d2
  678.     beq.s    grap.nolace4
  679.  
  680.     moveq.l    #0,d2
  681.     move.w    pic_dpt(a2),d2
  682.     muls    pic_wid(a2),d2
  683.     add.w    d2,d5            ;interlace gedoe
  684. grap.nolace4
  685.  
  686.     lea    gracprbpl,a4        ;iffpln neerzetten
  687.     lea    gracprpln,a0        ;iffpln neerzetten
  688.     moveq.l    #0,d2
  689.     move.w    pic_dpt(a2),d2        ;plnnummer 1 halen
  690.     move.l    #8,d6            ;copper step !
  691.  
  692.     tst.l    curpic2            ;2de picture ?
  693.     bne.s    grap.pic2
  694. grap.nopic2
  695.     move.w    d5,34(a1)        ;modulo oneven zetten
  696.     bra    grap.nodpl
  697. grap.pic2
  698.     move.l    curpic2,a3        ;oneven plane
  699.     move.l    currot2,a5        ;oneven plane
  700.     clr.l    curpic2            ;mischien niet goed
  701.     clr.l    curpal2            ;mischien niet goed
  702.     clr.l    currot2            ;mischien niet goed
  703.  
  704.     cmp.l    curpic1,a3        ;picture hetzelfde ?
  705.     beq    grap.nopic2
  706.     
  707.     cmp.l    #0,currot1        ;routine ?    
  708.     beq.s    grap.norot
  709.     cmp.l    currot1,a5        ;routine hetzelfde ?
  710.     beq    grap.nopic2
  711. grap.norot
  712.  
  713.     cmp.b    #3,d2            ;> 8 kleuren ?
  714.     bgt    grap.nopic2
  715.     move.w    pic_dpt(a3),d3        ;plnnummer 2 halen
  716.     cmp.b    d2,d3            ;gelijke plnummers ?
  717.     bne    grap.nopic2
  718.     move.w    pic_vew(a2),d1
  719.     cmp.w    pic_vew(a3),d1        ;view gelijk ?
  720.     bne    grap.nopic2
  721.  
  722.     move.w    pic_vew(a2),d1        ;groter dan view test
  723.     btst    #6,d1            ;super hires ?
  724.     beq.s    grap.nohi2a
  725.     move.l    #vew_wid*4,d1
  726.     bra.s    grap.nohi2b
  727. grap.nohi2a
  728.     btst    #15,d1            ;hires ?
  729.     beq.s    grap.noshi2a
  730.     move.l    #vew_wid*2,d1
  731.     bra.s    grap.nohi2b
  732. grap.noshi2a
  733.     move.l    #vew_wid,d1
  734. grap.nohi2b
  735.     cmp.w    pic_wid(a2),d1        ;breder dan view ?
  736.     bgt.s    grap.small
  737.     cmp.w    pic_wid(a3),d1        ;breder dan view ?
  738.     bgt.s    grap.small
  739.  
  740.     move.w    pic_vew(a2),d1
  741.     btst    #2,d1
  742.     beq.s    grap.nolace8a
  743.     move.l    hogscr,d1
  744.     add.l    d1,d1
  745.     bra.s    grap.nolace8b
  746. grap.nolace8a
  747.     move.l    hogscr,d1
  748. grap.nolace8b
  749.     cmp.w    pic_hgt(a2),d1        ;hoger dan view ?
  750.     bgt.s    grap.small
  751.     cmp.w    pic_hgt(a3),d1        ;hoger dan view ?
  752.     bgt.s    grap.small
  753.     bra.s    grap.big
  754.  
  755. grap.small
  756.     move.w    pic_hgt(a2),d1        ;wid+hgt<vew
  757.     cmp.w    pic_hgt(a3),d1        ;hoogte gelijk ?
  758.     bne    grap.nopic2
  759.     move.w    pic_wid(a2),d1
  760.     cmp.w    pic_wid(a3),d1        ;breedte gelijk ?
  761.     bne    grap.nopic2
  762.  
  763. grap.big
  764.     move.l    a3,curpic2
  765.     move.l    a3,curpal2
  766.     move.l    a5,currot2
  767.  
  768.     tst.b    dplctr            ;double playfield al gezet ?
  769.     beq.s    grap.nocop
  770.  
  771.     move.w    30(a1),34(a1)        ;modulo copieren
  772.  
  773.     move.w    2(a4),d1        ;bplcon0
  774.     btst    #10,d1            ;al double playfield ?
  775.     beq.s    grap.ta
  776.  
  777.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  778.     move.w    6(a0),14(a0)
  779.  
  780.     move.w    18(a0),26(a0)        ;plane 2>3 copieren
  781.     move.w    22(a0),30(a0)
  782.  
  783.     move.w    34(a0),42(a0)        ;plane 4>5 copieren
  784.     move.w    38(a0),46(a0)
  785.  
  786.     bra.s    grap.tb
  787. grap.ta
  788.     move.w    18(a0),42(a0)        ;plane 2>5 copieren
  789.     move.w    22(a0),46(a0)
  790.  
  791.     move.w    10(a0),26(a0)        ;plane 1>3 copieren
  792.     move.w    14(a0),30(a0)
  793.  
  794.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  795.     move.w    6(a0),14(a0)
  796.  
  797. grap.tb
  798.     move.l    #palette,a3        ;palette copieren
  799.  
  800.     move.w    #8-1,d1
  801. grap.pal
  802.     move.w    (a3)+,14(a3)
  803.     dbra    d1,grap.pal
  804.  
  805. grap.nocop
  806.     add.w    d3,d2
  807.     lsl.w    #8,d2
  808.     lsl.w    #4,d2
  809.     or.w    #$400,d2
  810.     move.w    d2,2(a4)        ;bplcon0
  811.  
  812.     movem.l    d0-d7/a0-a6,-(sp)
  813.  
  814.     move.l    curpic,a2        ;animpic ?
  815.     move.l    curfrm,d7
  816.     cmp.l    #0,a2
  817.     bne.s    grap.noanipic
  818.  
  819.     move.l    curpic2,a2        ;normal pic ?
  820.     move.l    curfrm2,d7
  821.     cmp.l    #0,a2
  822.     beq.s    grap.nodplpic
  823.  
  824. grap.noanipic
  825.     add.l    d6,a0
  826.     add.w    d6,d6
  827.     bsr.s    grappln            ;a2,d6,d7,d0
  828. grap.nodplpic
  829.     movem.l    (sp)+,d0-d7/a0-a6
  830.     add.w    d6,d6
  831.     bra.s    grap.nodpla
  832.  
  833.  
  834. grap.nodpl                ;geen double playfield
  835.     lsl.w    #8,d2
  836.     lsl.w    #4,d2
  837.     move.w    d2,2(a4)        ;bplcon0
  838.  
  839. grap.nodpla
  840.     move.w    d5,30(a1)        ;modulo even
  841.  
  842.     moveq.l    #0,d3
  843.     add.w    pic_vew(a2),d3        ;viewmode add
  844.     moveq.l    #0,d2
  845.     move.w    2(a4),d2
  846.     or.l    d3,d2
  847.     or.l    #$300,d2        ;genlock info
  848.     move.w    d2,2(a4)
  849.     
  850.     bsr.s    grappln            ;a2,d6,d7,d0
  851.  
  852. grap.end
  853.     
  854.     movem.l    (sp)+,d0-d7/a0-a6
  855.     rts
  856.         
  857.  
  858.     ;sets on of the 2 possible pictures to the copper
  859.     ;handles interlace
  860.  
  861.     ;d7=framenummer
  862.     ;d6=copperliststap
  863.     ;d0=raw planes positie
  864.     ;a2=current picture
  865. grappln                    ;planes invullen 
  866.     movem.l    d0-d7/a0-a6,-(sp)
  867.  
  868.     lea    pic_raw(a2),a1
  869.     move.l    a1,d0            ;raw planes
  870.     
  871.     moveq.l    #0,d2            ;x*y
  872.     move.w    pic_wid(a2),d2
  873.     lsr.l    #1,d2            ;/2
  874.     moveq.l    #0,d3
  875.     move.w    pic_hgt(a2),d3
  876.     muls    d3,d2
  877.     
  878.     move.l    d2,d4
  879.     add.l    d2,d2
  880.  
  881.     move.w    pic_dpt(a2),d3
  882.     muls    d3,d4            ;hele picture size
  883.     muls    d7,d4            ;frame*size d7 !
  884.  
  885.     add.l    d4,d4
  886.  
  887.     add.l    d4,d0
  888.  
  889.     move.l    #vew_wid,d5        ;max x view
  890.     move.l    hogscr,d4        ;max y view
  891.     move.w    pic_vew(a2),d1        ;viewmode add
  892.     btst    #2,d1
  893.     beq.s    grappln.nolace
  894.     add.l    d4,d4            ;max y view
  895. grappln.nolace
  896.     btst    #15,d1            ;hires ?
  897.     beq.s    grappln.nohi
  898.     move.l    #vew_wid*2,d5        ;max x view
  899. grappln.nohi
  900.     btst    #6,d1            ;super hires ?
  901.     beq.s    grappln.noshi
  902.     move.l    #vew_wid*4,d5        ;max x view
  903. grappln.noshi
  904.  
  905.     moveq.l    #0,d3            ;scherm centreren
  906.     move.w    pic_wid(a2),d3        ;pic breedte in bytes
  907.     cmp.w    d5,d3            ;breder dan scherm ?
  908.     ble.s    grappln.qa
  909.     sub.w    d5,d3            ;-scherm breedte
  910.     lsr.w    #2,d3            ;/4
  911.  
  912.     add.l    d3,d3
  913.  
  914.     add.l    d3,d0
  915. grappln.qa
  916.     move.w    pic_hgt(a2),d3        ;pic hoogte in bytes
  917.     cmp.w    d4,d3            ;hoger dan scherm ?
  918.     ble.s    grappln.qb
  919.     sub.w    d4,d3            ;-scherm breedte
  920.     lsr.w    #1,d3            ;/2
  921.     moveq.l    #0,d5
  922.     move.w    pic_wid(a2),d5        ;pic breedte in bytes
  923.     muls    pic_dpt(a2),d5
  924.     muls    d5,d3
  925.     add.l    d3,d0
  926. grappln.qb
  927.     moveq.l    #0,d2
  928.     move.w    pic_wid(a2),d2
  929.  
  930.     move.w    pic_vew(a2),d5        ;interlace flipping ?
  931.     btst    #2,d5
  932.     beq.s    grappln.nolac7b
  933.  
  934.     move.w    $04(a6),d5        ;even/oneven ?
  935.     btst    #15,d5
  936.     beq.s    grappln.nolac7b
  937.     
  938.     moveq.l    #0,d3
  939.     move.w    pic_wid(a2),d3
  940.     muls    pic_dpt(a2),d3
  941.     add.l    d3,d0
  942. grappln.nolac7b
  943.  
  944.     move.w    pic_dpt(a2),d1        ;plnnummer 1 halen
  945.     tst.w    d1            ;0 planes ?
  946.     beq.s    grappln.end
  947.     sub.w    #1,d1
  948. grappln.a
  949.     move.w    d0,3*2(a0)
  950.     swap    d0
  951.     move.w    d0,1*2(a0)
  952.     swap    d0
  953.     add.l    d6,a0            ;d6=copper step !
  954.     add.l    d2,d0
  955.     dbra    d1,grappln.a
  956. grappln.end
  957.     movem.l    (sp)+,d0-d7/a0-a6
  958.     rts
  959.  
  960.     ;sets palettes to copper
  961.     
  962. grac
  963.     movem.l    d0-d7/a0-a6,-(sp)
  964.  
  965.     lea    curpal1,a3        ;palette 1
  966.     move.l    #palette,a1
  967.     bsr.s    gracfrm
  968.  
  969.     lea    curpal2,a3        ;palette 2 (dpl)
  970.     move.l    #8*2+palette,a1
  971.     bsr.s    gracfrm
  972.     
  973.     bsr.s    palctr            ;palette-buffer to copper
  974. grac.end
  975.     movem.l    (sp)+,d0-d7/a0-a6
  976.     rts
  977.         
  978.     ;moves palette from picture to palette-buffer
  979.  
  980. gracfrm
  981.     movem.l    d0-d7/a0-a6,-(sp)
  982.     tst.l    (a3)            ;palette aanwezig ?
  983.     beq.s    gracfrm.end
  984.  
  985.     move.l    (a3),a2            ;current palette
  986.     
  987.     cmp.l    #'PALE',(a2)        ;palette ?
  988.     bne.s    gracfrm.pict
  989.     lea    6(a2),a0        ;palette
  990.     move.w    4(a2),d0        ;aantal kleuren
  991.     bra.s    gracfrm.col
  992. gracfrm.pict
  993.     cmp.l    #'ANIM',(a2)        ;animatie ?
  994.     bne.s    gracfrm.noanim
  995.  
  996.     moveq.l    #0,d1
  997.     move.w    pic_ani(a2),d1
  998.     bclr    #7,d1            ;behandelbit weghalen
  999.  
  1000.     moveq.l    #0,d3
  1001.     move.w    pic_wid(a2),d3
  1002.     lsr.w    #1,d3            ;/2
  1003.     muls    pic_hgt(a2),d3
  1004.     muls    pic_dpt(a2),d3
  1005.  
  1006.     add.l    d3,d3
  1007.  
  1008.     add.l    #pic_raw,d3
  1009.     move.l    d3,d5
  1010.  
  1011.     btst    #0,d1
  1012.     bne.s    gracfrm.buf2
  1013.     moveq.l    #0,d5
  1014. gracfrm.buf2
  1015.     add.l    d5,a2
  1016. gracfrm.noanim
  1017.     lea    pic_pal(a2),a0        ;palette
  1018.     move.w    pic_palnum(a2),d0
  1019.  
  1020.     cmp.w    #32-1,d0        ;niet meer dan 32 kleuren
  1021.     ble    gracfrm.sub
  1022.     move.w    #32-1,d0
  1023. gracfrm.sub
  1024.  
  1025.     tst.w    d0            ;0 planes ?
  1026.     beq.s    gracfrm.end
  1027. gracfrm.col
  1028. gracfrm.fa
  1029.     move.w    (a0)+,(a1)+
  1030.     dbra    d0,gracfrm.fa
  1031. gracfrm.end
  1032.     movem.l    (sp)+,d0-d7/a0-a6
  1033.     rts
  1034.     
  1035.     ;handles colorcycling in the palette-buffer
  1036.     ;and copies palette-buffer to copper
  1037.  
  1038. palctr
  1039.     movem.l    d0-d7/a0-a6,-(sp)
  1040.  
  1041.     move.l    curpic1,a2        ;current raw
  1042.     cmp.l    #0,a2
  1043.     beq.s    palctr.qb
  1044.     lea    cycdel1,a3        ;cycle delays
  1045.     move.l    #palette,a4
  1046.     bsr    palcyc
  1047. palctr.qb
  1048.     move.l    curpic2,a2        ;current raw
  1049.     cmp.l    #0,a2
  1050.     beq.s    palctr.c
  1051.     lea    cycdel2,a3        ;cycle delays
  1052.     move.l    #8*2+palette,a4
  1053.     bsr    palcyc
  1054.  
  1055. palctr.c
  1056.     lea    gracprcol,a1
  1057.     move.l    #palette,a0
  1058.  
  1059.     move.w    00(a0),00*4+2(a1)
  1060.     move.w    02(a0),01*4+2(a1)
  1061.     move.w    04(a0),02*4+2(a1)
  1062.     move.w    06(a0),03*4+2(a1)
  1063.     move.w    08(a0),04*4+2(a1)
  1064.     move.w    10(a0),05*4+2(a1)
  1065.     move.w    12(a0),06*4+2(a1)
  1066.     move.w    14(a0),07*4+2(a1)
  1067.     move.w    16(a0),08*4+2(a1)
  1068.     move.w    18(a0),09*4+2(a1)
  1069.  
  1070.     move.w    20(a0),10*4+2(a1)
  1071.     move.w    22(a0),11*4+2(a1)
  1072.     move.w    24(a0),12*4+2(a1)
  1073.     move.w    26(a0),13*4+2(a1)
  1074.     move.w    28(a0),14*4+2(a1)
  1075.     move.w    30(a0),15*4+2(a1)
  1076.     move.w    32(a0),16*4+2(a1)
  1077.     move.w    34(a0),17*4+2(a1)
  1078.     move.w    36(a0),18*4+2(a1)
  1079.     move.w    38(a0),19*4+2(a1)
  1080.  
  1081.     move.w    40(a0),20*4+2(a1)
  1082.     move.w    42(a0),21*4+2(a1)
  1083.     move.w    44(a0),22*4+2(a1)
  1084.     move.w    46(a0),23*4+2(a1)
  1085.     move.w    48(a0),24*4+2(a1)
  1086.     move.w    50(a0),25*4+2(a1)
  1087.     move.w    52(a0),26*4+2(a1)
  1088.     move.w    54(a0),27*4+2(a1)
  1089.     move.w    56(a0),28*4+2(a1)
  1090.     move.w    58(a0),29*4+2(a1)
  1091.  
  1092.     move.w    60(a0),30*4+2(a1)
  1093.     move.w    62(a0),31*4+2(a1)
  1094.  
  1095.     movem.l    (sp)+,d0-d7/a0-a6
  1096.     rts
  1097.  
  1098.     ;colorcyclinghandling of a palette
  1099.  
  1100. palcyc
  1101.     movem.l    d0-d7/a0-a6,-(sp)
  1102.     move.w    #4-1,d7            ;4 cycles
  1103. palcyc.d
  1104.     tst.w    (a3)+            ;delay klaar ?
  1105.     bne.s    palcyc.c
  1106.     
  1107.     moveq.l    #0,d1
  1108.     move.b    pic_cycstr(a2),d1    ;start color
  1109.     lsl.b    #1,d1        ;*2
  1110.  
  1111.     moveq.l    #0,d2
  1112.     move.b    pic_cycend(a2),d2    ;end color
  1113.     lsl.b    #1,d2        ;*2
  1114.  
  1115.     moveq.l    #0,d3
  1116.     move.b    pic_cycadd(a2),d3    ;richting
  1117.  
  1118.     move.l    a4,a0            ;palette pointer
  1119.     move.l    a0,a1
  1120.     add.l    d1,a0            ;startcolor
  1121.     add.l    d2,a1            ;endcolor
  1122.     
  1123.     cmp.b    #1,d3            ;omhoog
  1124.     beq.s    palcyc.up
  1125.     cmp.b    #3,d3            ;omlaag
  1126.     beq.s    palcyc.down
  1127.     bra.s    palcyc.i
  1128.  
  1129. palcyc.up                ;kleuren copieren
  1130.     move.w    (a1),d4            ;laatst color bewaren
  1131. palcyc.f                ;kleuren copieren
  1132.     cmp.l    a0,a1
  1133.     beq.s    palcyc.fa
  1134.     move.w    -(a1),2(a1)
  1135.     bra    palcyc.f
  1136. palcyc.fa
  1137.     move.w    d4,(a1)
  1138.     bra.s    palcyc.g    
  1139.     
  1140. palcyc.down
  1141.     move.w    (a0),d4            ;laatst color bewaren
  1142. palcyc.h                ;kleuren copieren
  1143.     cmp.l    a0,a1
  1144.     beq.s    palcyc.ha
  1145.     move.w    2(a0),(a0)+
  1146.     bra    palcyc.h
  1147. palcyc.ha
  1148.     move.w    d4,(a1)
  1149.  
  1150. palcyc.g
  1151.     move.b    pic_cycspd(a2),-1(a3)    ;delay zetten
  1152.     bra.s    palcyc.i
  1153. palcyc.c
  1154.     sub.w    #1,-2(a3)        ;cycle delay aftellen
  1155. palcyc.i
  1156.     add.l    #4,a2            ;next cycle info
  1157.     dbra    d7,palcyc.d
  1158.  
  1159. palcyc.qb
  1160.     movem.l    (sp)+,d0-d7/a0-a6
  1161.     rts
  1162.  
  1163.  
  1164. ;    SECTION    variabelen,DATA_c
  1165.  
  1166.     cnop    0,2
  1167. curtsk        dc.l    0
  1168. tskpri        dc.l    0
  1169. duplok        dc.l    0
  1170. inttel        dc.l    0
  1171. intdel        dc.l    0
  1172.  
  1173. form        dc.l    0
  1174. ifffil        dc.l    0
  1175. intvbold    dc.l    0
  1176. inttbeold    dc.l    0
  1177. patpos        dc.l    0
  1178. gfxlib        dc.l    0
  1179. doslib        dc.l    0
  1180. wbview      dc.l    0
  1181. mt_data        dc.l    0
  1182. memvid        dc.l    0
  1183. oldcprlist    dc.l    0
  1184. hogscr        dc.l    vew_hgt
  1185.  
  1186. inspos        dc.l    -1
  1187. anispd1        dc.w    1    ;nooit op 0 !
  1188. anispd2        dc.w    1
  1189.  
  1190.         cnop    0,2
  1191. varclr.s            ;start wissen
  1192. oldrot        dc.l    0
  1193. curpic        dc.l    0
  1194. curfrm        dc.l    0
  1195. cycdel1        ds.w    4
  1196. cycdel2        ds.w    4
  1197.  
  1198. rotinf1        dc.w    0
  1199. rotinf2        dc.w    0
  1200.  
  1201. effspd        dc.w    0
  1202. efflop        dc.b    0
  1203. anilop1        dc.b    0
  1204. anilop2        dc.b    0
  1205. anipal1        dc.b    0
  1206. anipal2        dc.b    0
  1207. rotdpl        dc.b    1
  1208. dplctr        dc.b    0
  1209.         cnop    0,2
  1210.  
  1211. insdat        ds.l    4
  1212. inspri        dc.l    0
  1213. instel        dc.w    0
  1214.  
  1215. cureff        dc.l    0
  1216. efftel        dc.w    0
  1217.  
  1218. curpal1        dc.l    0
  1219. curpal2        dc.l    0
  1220. currot1        dc.l    0
  1221. currot2        dc.l    0
  1222. curpic1        dc.l    0
  1223. curpic2        dc.l    0
  1224. anitel1        dc.w    0
  1225. anitel2        dc.w    0
  1226. curfrm1        dc.l    0
  1227. curfrm2        dc.l    0
  1228. oldfrm1        dc.l    0
  1229. oldfrm2        dc.l    0
  1230.  
  1231. varclr.e
  1232.         dc.l    0            ;wisruimte
  1233.     
  1234. varclr.ql    equ    varclr.e-varclr.s    ;wislengte
  1235.     
  1236. ;ownblit    dc.b    0
  1237. ntscmode    dc.b    0
  1238. end        dc.b    0
  1239.  
  1240. pronam    dc.b    'VideoTracker',0
  1241.     cnop    0,2
  1242. dosnam    dc.b    'dos.library',0
  1243.     cnop    0,4
  1244. gfxnam    dc.b    'graphics.library',0
  1245.     cnop    0,4
  1246.     
  1247.     cnop    0,4
  1248. gra.s
  1249. gracprscr
  1250.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1251. gracprbpl
  1252.     dc.w    $100,$9000,$102,$0000,$104,$0020
  1253.     dc.w    $108,$0000,$10a,$0000
  1254. gracprpln
  1255.     dc.w    $e0,$0000,$e2,$0000
  1256.     dc.w    $e4,$0000,$e6,$0000
  1257.     dc.w    $e8,$0000,$ea,$0000
  1258.     dc.w    $ec,$0000,$ee,$0000
  1259.     dc.w    $f0,$0000,$f2,$0000
  1260.     dc.w    $f4,$0000,$f6,$0000
  1261. gracprcol
  1262.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1263.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1264.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1265.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1266. cprjmp
  1267.     dc.w    $080,0,$082,0
  1268. gra.e
  1269. gra.ql    equ    gra.e-gra.s        ;block lengte
  1270.  
  1271.  
  1272. cpr
  1273.     dc.w    $0001,$fffe
  1274.     dc.w    $09c,$8001        ;tbeint
  1275. cprspr
  1276.     dc.w    $120,$0000,$122,$0000
  1277.     dc.w    $124,$0000,$126,$0000
  1278.     dc.w    $128,$0000,$12a,$0000
  1279.     dc.w    $12c,$0000,$12e,$0000
  1280.     dc.w    $130,$0000,$132,$0000
  1281.     dc.w    $134,$0000,$136,$0000
  1282.     dc.w    $138,$0000,$13a,$0000
  1283.     dc.w    $13c,$0000,$13e,$0000
  1284.  
  1285. cprbuf
  1286.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1287.     dc.w    $100,$9000,$102,$0000,$104,$0020
  1288.     dc.w    $108,$0000,$10a,$0000
  1289.     dc.w    $e0,$0000,$e2,$0000
  1290.     dc.w    $e4,$0000,$e6,$0000
  1291.     dc.w    $e8,$0000,$ea,$0000
  1292.     dc.w    $ec,$0000,$ee,$0000
  1293.     dc.w    $f0,$0000,$f2,$0000
  1294.     dc.w    $f4,$0000,$f6,$0000
  1295.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1296.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1297.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1298.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1299.     dc.w    $080,0,$082,0
  1300. cprbuf.e
  1301.  
  1302.     dc.w    $088,$0000        ;copjmp2
  1303.     dc.w    $080,0,$082,0        ;moet achter cprbck blijven !
  1304. cprbck
  1305. sprdat
  1306.     dc.w    $ffff,$fffe
  1307.  
  1308.  
  1309. prf_pat    equ    7            ;pref sample size
  1310. prf_patnum    equ    128        ;aantal songpos's
  1311. prf_len    equ    ((prf_pat*prf_patnum)+1)
  1312.  
  1313. prf_pos    equ    0            ;eff position (teller)
  1314.  
  1315. prf_effs    equ    1        ;start effect (*prf_patnum)
  1316. prf_effe    equ    2        ;end effect   (*prf_patnum)
  1317. prf_pri    equ    3            ;priority     (*prf_patnum)
  1318. prf_spd    equ    4            ;eff speed    (*prf_patnum)
  1319. prf_ani    equ    5            ;ani speed    (*prf_patnum)
  1320. prf_roth    equ    6        ;routine info (*prf_patnum)
  1321. prf_rotl    equ    7        ;routine info (*prf_patnum)
  1322.  
  1323. eff_num    equ    256            ;aantal effects
  1324.  
  1325. pic_wid        equ    4        ;wide in bytes
  1326. pic_hgt        equ    6        ;hoogte
  1327. pic_dpt        equ    8        ;number planes
  1328. pic_ani        equ    10        ;aantal effes (anim)
  1329. pic_vew        equ    12        ;viewmode
  1330. pic_cycstr    equ    14        ;cycle start (*4)
  1331. pic_cycend    equ    15        ;cycle end (*4)
  1332. pic_cycspd    equ    16        ;cycle speed (*4)
  1333. pic_cycadd    equ    17        ;cycle add (*4)
  1334. pic_palnum    equ    30        ;aantal kleuren
  1335. pic_pal        equ    32        ;palette start
  1336. pic_palsiz    equ    256*2        ;vaste palette size
  1337. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  1338.  
  1339. fil_namlen    equ    24        ;naamlengte
  1340. fil_len    equ    (fil_namlen+4+4)    ;effect info length
  1341. fil_num    equ    2+eff_num        ;aantal files
  1342. fil_fil    equ    0            ;file naam 
  1343. fil_dir    equ    24            ;pointer naar directory
  1344. fil_pnt    equ    28            ;pointer naar meminfo
  1345.  
  1346. palette    ds.w    64    ;palette
  1347.  
  1348. var_len        equ    $300        ;lengte vartabel
  1349.  
  1350. var__GfxBase    equ    $000        ;graphics lib
  1351. var_pic1    equ    $004        ;current picture
  1352. var_anispd1    equ    $008        ;animspeed
  1353. var_anitel1    equ    $00c        ;animspeed
  1354. var_cprbck    equ    $010        ;copperback
  1355. var_bck        equ    $014        ;background
  1356. var_pic2    equ    $018        ;current picture
  1357. var_ntsc    equ    $01c        ;ntsc/pal frequence
  1358. var_lnd        equ    $020        ;landscape
  1359. var_txt1    equ    $040        ;text
  1360. var_txt16    equ    15*4+var_txt1
  1361. var_vec1    equ    $080        ;vectors
  1362. var_vec16    equ    15*4+var_vec1
  1363. var_fon1    equ    $0c0        ;fonts
  1364. var_fon16    equ    15*4+var_fon1
  1365. var_cols1    equ    $100        ;colorsets
  1366. var_cols16    equ    15*4+var_cols1
  1367. var_obj1    equ    $180        ;objects
  1368. var_obj16    equ    15*4+var_obj1
  1369.  
  1370.     cnop    0,2
  1371. var    ds.b    $300    ;variabelen voor routines
  1372.  
  1373.     
  1374. ;    SECTION    10,CODE_C
  1375.         endc
  1376.  
  1377. ; this is the routine-source
  1378. ;**********************************************************************
  1379.  
  1380.         ifnd    rout
  1381. pic_wid        equ    4        ;wide in bytes
  1382. pic_hgt        equ    6        ;hoogte
  1383. pic_dpt        equ    8        ;number planes
  1384. pic_ani        equ    10        ;aantal effes (anim)
  1385. pic_vew        equ    12        ;viewmode
  1386. pic_cycstr    equ    14        ;cycle start (*4)
  1387. pic_cycend    equ    15        ;cycle end (*4)
  1388. pic_cycspd    equ    16        ;cycle speed (*4)
  1389. pic_cycadd    equ    17        ;cycle add (*4)
  1390. pic_palnum    equ    30        ;aantal kleuren
  1391. pic_pal        equ    32        ;palette start
  1392. pic_palsiz    equ    256*2        ;vaste palette size
  1393. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  1394.  
  1395. var_len        equ    $300        ;lengte vartabel
  1396.  
  1397. var__GfxBase    equ    $000        ;graphics lib
  1398. var_pic1    equ    $004        ;current picture
  1399. var_anispd1    equ    $008        ;animspeed
  1400. var_anitel1    equ    $00c        ;animspeed
  1401. var_cprbck    equ    $010        ;copperback
  1402. var_bck        equ    $014        ;background
  1403. var_pic2    equ    $018        ;current picture
  1404. var_ntsc    equ    $01c        ;ntsc/pal frequence
  1405. var_lnd        equ    $020        ;landscape
  1406. var_txt1    equ    $040        ;text
  1407. var_txt16    equ    15*4+var_txt1
  1408. var_vec1    equ    $080        ;vectors
  1409. var_vec16    equ    15*4+var_vec1
  1410. var_fon1    equ    $0c0        ;fonts
  1411. var_fon16    equ    15*4+var_fon1
  1412. var_cols1    equ    $100        ;colorsets
  1413. var_cols16    equ    15*4+var_cols1
  1414. var_obj1    equ    $180        ;objects
  1415. var_obj16    equ    15*4+var_obj1
  1416.  
  1417. vew_wid    equ    44
  1418. vew_hgt    equ    290
  1419. win_hgt    equ    117
  1420. win_str    equ    $1a
  1421.         endc
  1422.     
  1423. ;Test_Vec
  1424. ;mx68882        ;gebruik 68882 routine
  1425. ;copperspeed        ;gebruik copperbar om snelheid te meten
  1426. ;Nodraw            ;tekent geen lijnen om snelheid beter te meten
  1427.  
  1428. ;    mc68882
  1429. ;    machine 68882    ;in devpac 3: Machine 68882 dacht ik...
  1430.             ;Ik heb dit met maxxon gemaakt...
  1431. ;**********************************************************************
  1432.  
  1433. ;    assembleren met devpac, dan met hunkwizard of zoiets
  1434. ;    absoluut maken naar bijv. $80000 om de hunks enzo
  1435. ;    weg te halen, het eerste lonword moet "ROUT" zijn
  1436. ;    uiteindelijk, kijk uit dat hij volledig position-
  1437. ;    independent blijft (geeft devpac aan en hw ook)
  1438.  
  1439.  
  1440.     ;hier staan de picture-tabel offsets,begint met
  1441.     ;longword "PICT"
  1442.  
  1443. ;vew_wid    equ    44
  1444. ;vew_hgt    equ    290
  1445.  
  1446. ;pic_wid    equ    4        ;width in bytes
  1447. ;pic_hgt    equ    6        ;hoogte in lijnen
  1448. ;pic_dpt    equ    8        ;number of planes
  1449. ;pic_ani    equ    10        ;aantal frames (anim)
  1450. ;pic_vew    equ    12        ;viewmode (bplcon0)
  1451.  
  1452.     ;4 cycles mogelijk (deluxe paint)
  1453.  
  1454. ;pic_cycstr    equ    14        ;cycle start (*4)
  1455. ;pic_cycend    equ    15        ;cycle end (*4)
  1456. ;pic_cycspd    equ    16        ;cycle speed (*4)
  1457. ;pic_cycadd    equ    17        ;cycle add (*4)
  1458. ;pic_palnum    equ    30        ;aantal kleuren -1 (dbra)
  1459. ;pic_pal    equ    32        ;palette start
  1460. ;pic_palsiz    equ    256*2        ;vaste palette size
  1461.                 ;256 kleuren mogelijk
  1462. ;pic_raw    equ    pic_pal+pic_palsiz    ;raw planes start
  1463.  
  1464.     ;zo opgebouwd:
  1465.     ;plane 0 row 0
  1466.     ;plane 1 row 0
  1467.     ;plane 2 row 0
  1468.     ;plane 0 row 1
  1469.     ;plane 1 row 1
  1470.     ;plane 2 row 1
  1471.     ;voor snellere blits
  1472.     
  1473.     ;dit is de vector-tabel, imagine en rot3d wordt
  1474.     ;in vt omgezet naar een eigen vector-tabel
  1475.     ;ik heb een losse voorbeeld.bin erbij gepacked
  1476.     ;begint met "VECT"
  1477.  
  1478.  
  1479. vec_xyzlen    equ    $4        ;lengte xyzc tabel
  1480.  
  1481.     ;xyzc tabel:
  1482.     ;aantal xyzc's  -1        word
  1483.     ;x,y,z coordinaten en c (kleur) in words
  1484.  
  1485. vec_pollen    equ    $8        ;lengte polygoon tabel
  1486.     
  1487.     ;polygonen tabel: (uit mijn hoofd, bugvrij ?)
  1488.     ;aantal poly's -1        word
  1489.     ;poly 1 aantal lijnen -1    word
  1490.     ;poly 1 lijn 1 xyzc 1 xyzc 2    word,word,xyzc-tabel nummer
  1491.     ;poly 1 lijn 2 xyzc 1 xyzc 2    word,word
  1492.     ;etc.
  1493.     
  1494. vec_palnum    equ    $10        ;aantal kleuren -1 (dbra)
  1495. vec_pal    equ    $12        ;palette in words (256)
  1496. vec_xyz    equ    256*2+vec_pal    ;start xyzc tabel
  1497. vec_xyznum    equ    vec_xyz        ;aantal xyzc's
  1498.  
  1499.     ;de variabelen-tabel, geeft nuttige informatie
  1500.     ;voor de routines
  1501.     ;de huidige tabel bevat meer info maar dat heeft de
  1502.     ;vectorroutine toch niet nodig
  1503.  
  1504. ;var_gfxlib    equ    $000    ;graphics lib
  1505. ;var_pic    equ    $004    ;current picture 1
  1506. ;var_anispd1    equ    $008    ;animspeed
  1507. ;var_anitel1    equ    $00c    ;animspeed
  1508. ;var_cprbck    equ    $010    ;copperback
  1509. ;var_bck    equ    $014    ;background
  1510. ;var_ntsc    equ    $01c    ;frequency
  1511. ;var_txt1    equ    $040    ;text
  1512. ;var_txt16    equ    15*4+var_txt1
  1513. ;var_fon1    equ    $0c0    ;fonts
  1514. ;var_fon16    equ    15*4+var_fon1
  1515. ;var_vec1    equ    $080    ;vectors
  1516. ;var_vec64    equ    63*4+var_vec1
  1517. ;var_obj1    equ    $180    ;objects
  1518. ;var_obj64    equ    63*4+var_obj1
  1519.  
  1520. rot_vewh    equ    $8000    ;bplcon0 width-mode low-res/hi-res
  1521. rot_vewl    equ    $4    ;bplcon0 heigth-mode no-lace/interlace
  1522. rot_vew        equ    rot_vewh+rot_vewl
  1523. rot_dpt        equ    1    ;aantal planes (depth)
  1524.  
  1525. ;shade    ;als dit label aan staat, is het de vectorshade routine
  1526.     ;(1 plane,6 buffers,copperlijst)
  1527.  
  1528.     ifeq    rot_vewh-0
  1529.     ifeq    rot_dpt-1
  1530. rot_blit    equ    1        ;aantal clear blits
  1531.     endc
  1532.     ifeq    rot_dpt-2
  1533. rot_blit    equ    1        ;aantal clear blits
  1534.     endc
  1535.     ifeq    rot_dpt-3
  1536. rot_blit    equ    1        ;aantal clear blits
  1537.     endc
  1538.     ifeq    rot_dpt-4
  1539. rot_blit    equ    2        ;aantal clear blits
  1540.     endc
  1541.     ifeq    rot_dpt-5
  1542. rot_blit    equ    2        ;aantal clear blits
  1543.     endc
  1544.     ifeq    rot_dpt-6
  1545. rot_blit    equ    2        ;aantal clear blits
  1546.     endc
  1547.     endc
  1548.     
  1549.     ifeq    rot_vewh-$8000
  1550.     ifeq    rot_dpt-1
  1551. rot_blit    equ    1        ;aantal clear blits
  1552.     endc
  1553.     ifeq    rot_dpt-2
  1554. rot_blit    equ    2        ;aantal clear blits
  1555.     endc
  1556.     ifeq    rot_dpt-3
  1557. rot_blit    equ    2        ;aantal clear blits
  1558.     endc
  1559.     ifeq    rot_dpt-4
  1560. rot_blit    equ    2        ;aantal clear blits
  1561.     endc
  1562.     endc
  1563.     
  1564.     ifeq    rot_vewh-0
  1565. bck_wid    equ    vew_wid        ;view width
  1566. rot_wid    equ    (384/8)        ;breedte planes
  1567. rot_drot    equ    256        ;max. grote vectorobj
  1568. rot_cen    equ    0
  1569.     endc
  1570.     ifeq    rot_vewh-$8000
  1571. bck_wid    equ    vew_wid*2
  1572. rot_wid    equ    (384/8)*2
  1573. rot_drot    equ    256*2
  1574. rot_cen    equ    8
  1575.     endc
  1576.  
  1577.     ifeq    rot_vewl-$0
  1578. bck_hgt    equ    vew_hgt        ;viewable hoogte
  1579. rot_hgt    equ    384        ;hoogte planes
  1580.     endc
  1581.     ifeq    rot_vewl-$4
  1582. bck_hgt    equ    vew_hgt*2
  1583. rot_hgt    equ    384*2
  1584.     endc
  1585.  
  1586.  
  1587.     SECTION    3,CODE_c
  1588.  
  1589.     
  1590. ;    a0=variabelen tabel    (adres tabel)
  1591. ;    d0=routinfo        (routinemode-waarde)
  1592.  
  1593. rot
  1594.     dc.l    'ROUT'        ;effect-longword-ID
  1595.     movem.l    d2-d7/a1-a6,-(sp)
  1596.  
  1597.     lea    rot,a6        ;a6 prog base (zorgt ervoor
  1598.                 ;dat deze routine overal
  1599.                 ;in het geheugen kan staan)
  1600.     lea    ($dff000).l,a5    ;a5 gebruikt ik in de hele file
  1601.  
  1602.     ifd    shade
  1603.     lea    rotcop,a1        ;copperback invullen
  1604.     move.l    var_cprbck(a0),d1    ;copperlist terugjump
  1605.     sub.l    #8,d1        ;adres naar vt-copperlist
  1606.     move.w    d1,6(a1)
  1607.     swap    d1
  1608.     move.w    d1,2(a1)
  1609.     endc
  1610.     
  1611.     ifnd    shade
  1612.     lea    rotpal1,a3        ;palette van zichtbare
  1613.     move.l    a3,a4        ;buffer naar werkbuffer
  1614.     move.l    real-rot(a6),d1
  1615.     add.l    d1,a3        ;destination
  1616.     eor.l    #(rotpic2-rotpic1),d1
  1617.     add.l    d1,a4        ;source
  1618.     move.w    #1,d1
  1619.     lsl.w    #rot_dpt,d1
  1620.     sub.w    #1,d1
  1621. rotpalcop.c                ;palette
  1622.     move.w    (a4)+,(a3)+
  1623.     dbra    d1,rotpalcop.c
  1624.     endc
  1625.  
  1626.     lea    var_obj1(a0),a2    ;copy current balls 
  1627.     lea    rotbaltab-rot(a6),a1
  1628.     move.w    #16-1,d1
  1629. rotbal.cop
  1630.     move.l    (a2)+,(a1)+
  1631.     dbra    d1,rotbal.cop
  1632.  
  1633.     tst.l    var_vec1(a0)    ;nieuwe vector ?
  1634.     beq.s    rot.novec
  1635.     move.l    var_vec1(a0),a1    ;halen
  1636.     clr.l    var_vec1(a0)    ;wissen
  1637.     cmp.l    curvec-rot(a6),a1    ;zelfde ?
  1638.     beq.s    rot.novec        ;palette niet copieren
  1639.     move.l    a1,curvec-rot(a6)    ;current vector
  1640.  
  1641.     ifnd    shade
  1642.     move.w    vec_palnum(a1),d1
  1643.     cmp.w    #-1,d1        ;geen kleuren ?
  1644.     beq.s    rot.novec
  1645.     move.w    #1,d2        ;maximale color check
  1646.     lsl.w    #rot_dpt,d2
  1647.     sub.w    #1,d2
  1648.     cmp.w    d2,d1
  1649.     ble.s    rotpalcop.a
  1650.     move.w    d2,d1
  1651. rotpalcop.a                ;vector palette copieren
  1652.     lea    vec_pal(a1),a2
  1653.     lea    rotpal1,a3
  1654.     add.l    real-rot(a6),a3    ;get current workbuffer
  1655. rotpalcop.bx
  1656.     move.w    (a2)+,(a3)+
  1657.     dbra    d1,rotpalcop.bx
  1658.     endc
  1659.  
  1660. rot.novec
  1661.     tst.l    curvec-rot(a6)    ;vector aanwezig ?
  1662.     beq    rot.end
  1663.     move.l    curvec-rot(a6),a1
  1664.     cmp.l    #'VECT',(a1)    ;file nog actueel ?
  1665.     bne    rot.end
  1666.         
  1667.     clr.l    d1        ;info ombouwen
  1668.     move.l    d0,d1
  1669.     divs    #8192,d1
  1670.     and.l    #$ffff,d1
  1671.     tst.b    d1
  1672.     beq.s    rot.norotclr
  1673.     clr.w    XROT-rot(a6)    ;xyz clear
  1674.     clr.w    YROT-rot(a6)
  1675.     clr.w    ZROT-rot(a6)
  1676. rot.norotclr
  1677.     muls    #8192,d1
  1678.     sub.l    d1,d0
  1679.  
  1680.     move.l    d0,d1
  1681.     divs    #4096,d1
  1682.     and.l    #$ffff,d1
  1683.     move.b    d1,clrmod-rot(a6)    ;clear on/off
  1684.     muls    #4096,d1
  1685.     sub.l    d1,d0
  1686.  
  1687.     move.l    d0,d1
  1688.     divs    #2048,d1
  1689.     and.l    #$ffff,d1
  1690.     move.b    d1,bufmod-rot(a6)    ;double buffer on/off
  1691.     muls    #2048,d1
  1692.     sub.l    d1,d0
  1693.  
  1694.     move.l    d0,d1
  1695.     divs    #128,d1
  1696.     and.l    #$ffff,d1
  1697.     move.l    d1,d7
  1698.     add.l    #1,d7
  1699.     muls    #2,d7        ;d7 snelheid (add)
  1700.     muls    #128,d1
  1701.     sub.l    d1,d0
  1702.  
  1703.     move.w    d0,d1
  1704.     divs    #64,d1
  1705.     and.l    #$ffff,d1
  1706.     move.w    d1,d3        ;d3 richting (d mov)
  1707.     muls    #64,d1
  1708.     sub.w    d1,d0
  1709.  
  1710.     move.w    d0,d1
  1711.     divs    #8,d1
  1712.     and.l    #$ffff,d1
  1713.     move.w    d1,d2        ;d2 type line/pix/ball
  1714.     muls    #8,d1
  1715.     sub.w    d1,d0
  1716.  
  1717.     move.w    d0,d1
  1718.     divs    #4,d1
  1719.     and.l    #$ffff,d1
  1720.     move.w    d1,d6        ;d6 x rot
  1721.     muls    #4,d1
  1722.     sub.w    d1,d0
  1723.  
  1724.     move.w    d0,d1
  1725.     divs    #2,d1
  1726.     and.l    #$ffff,d1
  1727.     move.w    d1,d5        ;d5 y rot
  1728.     muls    #2,d1
  1729.     sub.w    d1,d0
  1730.  
  1731.     move.w    d0,d4        ;d4 z rot
  1732.  
  1733.     muls    d7,d6
  1734.     muls    d7,d5
  1735.     muls    d7,d4
  1736.     
  1737.     move.w    d6,xadd-rot(a6)
  1738.     move.w    d5,yadd-rot(a6)
  1739.     move.w    d4,zadd-rot(a6)
  1740.     move.w    d3,dway-rot(a6)
  1741.     move.w    d7,dadd-rot(a6)
  1742.  
  1743.     tst.b    clrmod-rot(a6)    ;clear off ?
  1744.     bne.s    rot.noclear
  1745.  
  1746.     movem.l    d0-d7/a0-a6,-(sp)    ;clear screen
  1747.     
  1748.     lea    rotpln1,a3        ;plane + centreren
  1749.     add.l    #((rot_hgt-bck_hgt)/2*rot_wid*rot_dpt)+((rot_wid-bck_wid)/4*2),a3
  1750.     add.l    real-rot(a6),a3
  1751.  
  1752.     move.w    #0,$042(a5)
  1753.     move.w    #$100+$f0,$040(a5)
  1754.  
  1755.     move.w    #rot_wid-bck_wid,$064(a5)
  1756.     move.w    #rot_wid-bck_wid,$066(a5)
  1757.  
  1758.     move.w    #0,$074(a5)        ;a dat
  1759.     move.l    #0,$044(a5)        ;mask
  1760.  
  1761.     move.w    #rot_blit-1,d0
  1762. rot.blit1
  1763.     move.l    a3,$054(a5)        ;destination
  1764.     move.w    #((bck_hgt/rot_blit)*rot_dpt)*64+(bck_wid/2),$058(a5)
  1765.     bsr    rot.wblit
  1766.  
  1767.     add.l    #(bck_hgt/rot_blit)*rot_dpt*rot_wid,a3
  1768.  
  1769.     dbra    d0,rot.blit1
  1770.     movem.l    (sp)+,d0-d7/a0-a6
  1771.  
  1772. rot.noclear
  1773.     tst.b    d2
  1774.     bne.s    rot.typa
  1775.     bsr    VECTOR        ;calc coords
  1776.     bsr    rot.pxl        ;pixel
  1777.     bra.s    rot.typend
  1778.  
  1779. rot.typa
  1780.     cmp.b    #1,d2
  1781.     bne.s    rot.typb
  1782.     bsr    VECTOR        ;calc coords
  1783.     bsr    rotlin        ;lijnen
  1784.     bra.s    rot.typend
  1785. rot.typb
  1786.  
  1787.     cmp.b    #2,d2
  1788.     bne.s    rot.typc
  1789.     bsr    VECTOR        ;calc coords
  1790.     bsr    rotgls        ;glas
  1791.     bra.s    rot.typend
  1792. rot.typc
  1793.     cmp.b    #3,d2
  1794.     bne.s    rot.typd
  1795.     bsr    VECTOR        ;calc coords
  1796.     bsr    rotfil        ;solide
  1797.     bra.s    rot.typend
  1798. rot.typd
  1799.     cmp.b    #4,d2
  1800.     bne.s    rot.type
  1801.     bsr    VECTOR        ;calc coords
  1802.     bsr    rot.bal        ;ballen
  1803.     bra.s    rot.typend
  1804. rot.type
  1805.     cmp.b    #5,d2
  1806.     bne.s    rot.typf
  1807.     bsr    VECTOR        ;calc coords
  1808.     bsr    rotsym        ;symetrisch solide
  1809.     bra    rot.typend
  1810. rot.typf
  1811.  
  1812. rot.typend
  1813.     
  1814.     move.w    xadd-rot(a6),d0
  1815.     move.w    yadd-rot(a6),d1
  1816.     move.w    zadd-rot(a6),d2
  1817.  
  1818.     move.w    dadd-rot(a6),d3
  1819.     move.w    dway-rot(a6),d4
  1820.     
  1821.     add.w    d0,XROT-rot(a6)    ;hoek draaing
  1822.     add.w    d1,YROT-rot(a6)
  1823.     add.w    d2,ZROT-rot(a6)
  1824.  
  1825.     btst    #0,d4
  1826.     bne.s    rot.px
  1827.     add.w    d3,DROT-rot(a6)
  1828.     bra.s    rot.q
  1829. rot.px
  1830.     sub.w    d3,DROT-rot(a6)
  1831. rot.q
  1832.     cmp.w    #718,XROT-rot(a6)    ;vergelijkingen
  1833.     ble.s    NOP1
  1834.     sub.w    #718,XROT-rot(a6)
  1835.     
  1836. NOP1:    cmp.w    #718,YROT-rot(a6)
  1837.     ble.s    NOP2
  1838.     sub.w    #718,YROT-rot(a6)
  1839. NOP2:
  1840.     cmp.w    #718,ZROT-rot(a6)
  1841.     ble.s    NOP3
  1842.     sub.w    #718,ZROT-rot(a6)
  1843. NOP3:
  1844.     cmp.w    #rot_drot,DROT-rot(a6)
  1845.     ble.s    NOP4
  1846.     move.w    #rot_drot,DROT-rot(a6)
  1847. NOP4
  1848.     cmp.w    #0,DROT-rot(a6)
  1849.     bge.s    NOP5
  1850.     move.w    #0,DROT-rot(a6)
  1851. NOP5
  1852.  
  1853.  
  1854. GETMEOUT:
  1855.  
  1856. rot.end
  1857.     clr.l    d1
  1858.  
  1859.     ifd    shade
  1860.     lea    rotcop,a1
  1861.     move.l    a1,d1            ;copperlist
  1862.     lea    rotpic1,a2            ;raw rotplanes
  1863.     move.l    real-rot(a6),d2
  1864.     move.w    #4-1,d4
  1865. rotend.kb
  1866.     sub.l    #(rotpic2-rotpic1),d2
  1867.     cmp.l    #0-(rotpic2-rotpic1),d2
  1868.     bne    rotend.ka
  1869.     move.l    #5*(rotpic2-rotpic1),d2
  1870. rotend.ka
  1871.     move.l    a2,d3
  1872.     add.l    d2,d3
  1873.  
  1874.     move.l    #((rot_hgt-vew_hgt)/2*rot_wid*rot_dpt)+((rot_wid-vew_wid)/2)+(rotpln1-rotpic1),d6
  1875.     cmp.b    #50,var_ntsc(a0)
  1876.     beq    rotend.pal
  1877.     move.l    #((rot_hgt-(vew_hgt-56))/2*rot_wid*rot_dpt)+((rot_wid-vew_wid)/2)+(rotpln1-rotpic1),d6
  1878. rotend.pal
  1879.     add.l    d6,d3
  1880.     move.w    d3,$e(a1)
  1881.     swap    d3
  1882.     move.w    d3,$a(a1)
  1883.     add.l    #8,a1
  1884.     dbra    d4,rotend.kb    
  1885.     endc
  1886.  
  1887.     lea    rotpic1,a0            ;raw rotplanes
  1888.     move.l    real-rot(a6),d0        ;get scherm 2
  1889.  
  1890.     tst.b    bufmod-rot(a6)        ;buffer on/off
  1891.     bne.s    rot.end2
  1892.  
  1893.     ifnd    shade
  1894.     eor.l    #(rotpic2-rotpic1),real-rot(a6)    ;real=scherm 2
  1895.     endc
  1896.  
  1897.     ifd    shade
  1898.     move.l    real-rot(a6),d2
  1899.     add.l    #(rotpic2-rotpic1),d2
  1900.     cmp.l    #6*(rotpic2-rotpic1),d2
  1901.     bne    rotend.k
  1902.     clr.l    d2
  1903. rotend.k
  1904.     move.l    d2,real-rot(a6)
  1905.     endc
  1906.  
  1907. rot.end2
  1908.     add.l    d0,a0        
  1909.     movem.l    (sp)+,d2-d7/a1-a6
  1910.     rts
  1911.  
  1912. rot.wblit
  1913.     btst     #6,$002(a5)
  1914.     bne     rot.wblit
  1915.     rts
  1916.     
  1917. rot.bal
  1918.     movem.l    d0-d7/a0-a6,-(sp)
  1919.  
  1920.     move.w    #%1111111111111111,$044(a5)
  1921.     move.w    #%1111111111111111,$046(a5)
  1922.  
  1923.     move.l    rotbaltab-rot(a6),a1
  1924.     cmp.l    rotpal-rot(a6),a1    ;nieuwe bal ?
  1925.     beq.s    rot.bala
  1926.     move.l    a1,rotpal-rot(a6)    ;en opslaan
  1927.  
  1928.     ifnd    shade
  1929.     cmp.w    #rot_dpt,pic_dpt(a1)    ;depth hetzelfde ?
  1930.     bne.s    rot.bala
  1931.     
  1932.     move.w    pic_palnum(a1),d0
  1933.     lea    pic_pal(a1),a1
  1934.     lea    rotpal1,a2
  1935.     add.l    real-rot(a6),a2
  1936. rot.balpal
  1937.     move.w    (a1)+,(a2)+
  1938.     dbra    d0,rot.balpal
  1939.     endc
  1940.     
  1941. rot.bala
  1942.  
  1943.     clr.l    d0
  1944.     clr.l    d1
  1945.     clr.l    d2
  1946.     clr.l    d3
  1947.     clr.l    d4
  1948. rot.balb
  1949.     move.l    curvec-rot(a6),a4
  1950.     add.l    #vec_xyz,a4        ;info overslaan
  1951.         
  1952.     lea    xy,a2
  1953.     move.l    #$7fff,d5
  1954.     move.w    (a4)+,d7        ;aantal xyZ's-1 vanwege DBF_commando
  1955. rot.zaadbal
  1956.     move.w    4(a2),d3        ;z
  1957.     beq.s    rot.zaadbala    ;0 ?
  1958.     
  1959.     cmp.w    d5,d3        ;groter ?
  1960.     bgt.s    rot.zaadbala
  1961.     move.w    d3,d5        ;kleinste z bewaren
  1962.     move.l    a2,a3        ;xyz posiite bewaren
  1963.     move.l    a4,a1        ;kleur positie bewaren    
  1964. rot.zaadbala
  1965.     lea    6(a2),a2
  1966.     lea    8(a4),a4
  1967.     dbra    d7,rot.zaadbal
  1968.  
  1969.     cmp.w    #$7fff,d5        ;klaar ?
  1970.     beq.s    rot.balend
  1971.  
  1972.     moveq.l    #0,d4
  1973.     move.w    6(a1),d4        ;kleur
  1974.     add.w    d4,d4
  1975.     add.w    d4,d4        ;*4
  1976.     movem.w    (a3),d0/d1/d3    ;x,y,z
  1977.     bsr.s    rotobj        ;a0,d0,d1,d4
  1978.     clr.w    4(a3)        ;z wissen
  1979.     bra    rot.balb
  1980.  
  1981. rot.balend
  1982.     movem.l    (sp)+,d0-d7/a0-a6
  1983.     rts
  1984.  
  1985. rotobj                ;d3
  1986.     movem.l    d0-d7/a0-a6,-(sp)
  1987.  
  1988.     lea    rotbaltab,a0
  1989.     add.l    d4,a0
  1990.         
  1991.     tst.l    (a0)        ;ball file ?
  1992.     beq    rotobj.end
  1993.     move.l    (a0),a0
  1994.     cmp.l    #'OBJE',(a0)    ;nog levend ?
  1995.     bne    rotobj.end
  1996.     cmp.w    #rot_dpt,pic_dpt(a0)    ;depth hetzelfde ?
  1997.     bne    rotobj.end
  1998.     
  1999.     move.l    real-rot(a6),d6    ;get scherm 2
  2000.     lea    rotpln1,a1
  2001.     add.l    d6,a1
  2002.     
  2003.     clr.l    d2        ;centreer x
  2004.     move.w    pic_wid(a0),d2
  2005.     sub.l    #2,d2        ;-blitterscrollruimte
  2006.     lsl.l    #2,d2        ;*8/2
  2007.     sub.l    d2,d0
  2008.  
  2009.     clr.l    d2        ;centreer y
  2010.     move.w    pic_hgt(a0),d2
  2011.     lsr.l    #1,d2        ;/2
  2012.     sub.l    d2,d1
  2013.  
  2014.     move.l    d0,d2
  2015.     lsr.l    #4,d0        ;ruwe xpos
  2016.     lsl.l    #1,d0
  2017.     add.l    d0,a1
  2018.  
  2019.     muls    #rot_wid*rot_dpt,d1    ;ypos
  2020.     add.l    d1,a1
  2021.  
  2022.     clr.l    d6
  2023.     move.w    pic_wid(a0),d6    ;bltsize berekenen
  2024.     lsr.w    #1,d6        ;/2
  2025.     clr.l    d5
  2026.     move.w    pic_hgt(a0),d5
  2027.     muls    pic_dpt(a0),d5
  2028.     lsl.w    #6,d5        ;*64 voor bltsize
  2029.     add.w    d5,d6
  2030.     
  2031.     lsl.l    #3,d0        ;bitscroll verder bereken
  2032.     sub.l    d0,d2
  2033.     lsl.w    #8,d2
  2034.     lsl.w    #4,d2
  2035.     move.w    d2,$42(a5)        ;bltcon1
  2036.     add.w    #$0fca,d2
  2037.     move.w    d2,$40(a5)        ;bltcon0
  2038.  
  2039. rotobj.da
  2040.     clr.l    d5
  2041.     move.w    pic_ani(a0),d5    ;aantal brushes
  2042.  
  2043.     move.l    #256,d4        ;maximale z !
  2044.  
  2045.     divs    d5,d4
  2046.     and.l    #$ffff,d4
  2047.     and.l    #$ffff,d3
  2048.     divs    d4,d3
  2049.     and.l    #$ffff,d3
  2050.     
  2051.     clr.l    d5
  2052.     move.w    pic_wid(a0),d5    ;breedte
  2053.     muls    pic_hgt(a0),d5    ;hoogte
  2054.     muls    pic_dpt(a0),d5    ;plnnumes
  2055.  
  2056.     move.l    d5,d7
  2057.     add.l    d5,d5        ;plus mask
  2058.     muls    d3,d5        ;anipos
  2059.  
  2060.     lea    pic_raw(a0),a4    ;obj picture
  2061.     add.l    d5,a4
  2062.     move.l    a4,a3
  2063.     add.l    d7,a3        ;obj mask
  2064.  
  2065.     move.l    #rot_wid,d7
  2066.     sub.w    pic_wid(a0),d7
  2067.     move.w    d7,$60(a5)        ;bltcmod
  2068.     move.w    d7,$66(a5)        ;bltdmod
  2069.  
  2070.     move.w    #0,$62(a5)        ;bltbmod
  2071.     move.w    #0,$64(a5)        ;bltamod
  2072.  
  2073.     clr.l    d3
  2074.     move.w    pic_dpt(a0),d3    ;bck opslaan
  2075.  
  2076. rotobj.a
  2077.     move.l    a1,$48(a5)        ;bltcpt destination
  2078.     move.l    a4,$4c(a5)        ;bltbpt picture
  2079.     move.l    a3,$50(a5)        ;bltapt mask
  2080.     move.l    a1,$54(a5)        ;bltdpt destination
  2081.  
  2082.     move.w    d6,$58(a5)        ;bltsize
  2083.     bsr    rot.wblit
  2084.  
  2085. rotobj.bx
  2086. rotobj.end
  2087.     movem.l    (sp)+,d0-d7/a0-a6
  2088.     rts
  2089.  
  2090. rot.pxl                ;pixels zetten
  2091.     movem.l    d0-d7/a0-a6,-(sp)
  2092.     clr.l    d0
  2093.     clr.l    d1
  2094.     clr.l    d3
  2095.     clr.l    d4
  2096.  
  2097.     lea    xy,a2
  2098.     
  2099.     move.l    #rot_wid,d6
  2100.     move.l    #rot_wid*rot_dpt,d5    ;y
  2101.     move.l     #7,d4        ;x bit 8
  2102.     
  2103.     move.l    curvec-rot(a6),a1
  2104.     add.l    #vec_xyz,a1
  2105.     move.w    (a1)+,d7        ;aantal xyZ's-1 vanwege DBF_commando
  2106.  
  2107.     lea    rotpln1,a0
  2108.     add.l    real-rot(a6),a0    ;get scherm 2
  2109.     add.l    #(rot_dpt-1)*rot_wid,a0
  2110.     move.l    a0,a3
  2111. rot.pxla
  2112.  
  2113.     ifeq    1-rot_dpt
  2114.     movem.w    (a2)+,d0-d1/d3    ;xyz
  2115.  
  2116. ;    muls    d5,d1        ;y
  2117.  
  2118.     ifeq    rot_wid-(384/8*2)    ;*96
  2119.     lsl.w    #5,d1        ;*32
  2120.     move.w    d1,d3
  2121.     add.w    d1,d1        ;*2
  2122.     add.w    d3,d1
  2123.     endc
  2124.  
  2125.     ifeq    rot_wid-(384/8)    ;*48
  2126.     lsl.w    #4,d1        ;*16
  2127.     move.w    d1,d3
  2128.     add.w    d1,d1        ;*2
  2129.     add.w    d3,d1
  2130.     endc
  2131.  
  2132.     move.w    d0,d2
  2133.     lsr.w    #3,d2        ;/8
  2134.     add.w    d2,d1
  2135.     move.w    d4,d2
  2136.     and.w     d4,d0        ;x bit 8
  2137.     sub.w    d0,d2
  2138.  
  2139.     move.l    a3,a0
  2140.     add.l    d1,a0
  2141.     bset    d2,(a0)
  2142.     dbra    d7,rot.pxla
  2143.     endc
  2144.     
  2145.     iflt    1-rot_dpt
  2146.  
  2147.     movem.w    (a2)+,d0-d1/d3    ;xyz
  2148.     move.w    6(a1),d3        ;kleur
  2149.     add.l    #8,a1
  2150.     muls    d5,d1        ;y
  2151.     move.w    d0,d2
  2152.     lsr.w    #3,d2        ;/8
  2153.     add.w    d2,d1
  2154.     move.w    d4,d2
  2155.     and.w     d4,d0        ;x bit 8
  2156.     sub.w    d0,d2
  2157.  
  2158.     move.l    a3,a0
  2159.     add.l    d1,a0
  2160.     move.w    #rot_dpt-1,d0
  2161. rot.pxlb
  2162.     btst    d0,d3
  2163.     beq    rot.pxlc
  2164.     bset    d2,(a0)
  2165. rot.pxlc
  2166.     sub.l    d6,a0
  2167.     dbra    d0,rot.pxlb
  2168.     dbra    d7,rot.pxla
  2169.  
  2170. rot.pxlx
  2171.     endc
  2172.     movem.l    (sp)+,d0-d7/a0-a6
  2173.     rts
  2174.  
  2175. ;DRAWLINE-ROUTINE
  2176. ;d0 = x1
  2177. ;d1 = y1
  2178. ;d2 = x2
  2179. ;d3 = y2
  2180. ;uses d0-d6
  2181.  
  2182. rotlin                ;lijntjes trekken, joepie !
  2183.     movem.l    d0-d7/a0-a6,-(sp)
  2184.  
  2185.     move.l    curvec-rot(a6),a1
  2186.     add.l    4(a1),a1
  2187.     add.l    #vec_xyz,a1        ;info overslaan
  2188.  
  2189.     lea    xy,a2
  2190.     clr.l    d4
  2191.     move.w    (a1)+,d6        ;aantal poly's
  2192.     cmp.w    #-1,d6        ;geen ?
  2193.     beq.s    rotlin.end
  2194. rotlin.a
  2195.     move.w    (a1)+,d7        ;aantal lijnen
  2196.     lea    2(a1),a1        ;kleur overslaan
  2197. rotlin.bx
  2198.     move.w    (a1)+,d4
  2199.     subq.w    #1,d4
  2200.     muls    #6,d4
  2201.     movem.w    (a2,d4.w),d0-d1
  2202.  
  2203.     move.w    (a1)+,d4
  2204.     subq.w    #1,d4
  2205.     muls    #6,d4
  2206.     movem.w    (a2,d4.w),d2-d3
  2207.  
  2208.     bsr     DRAWLINE        ;lijn tekenen
  2209.     dbra    d7,rotlin.bx
  2210. ;    lea    2(a1),a1
  2211.     dbra    d6,rotlin.a
  2212. rotlin.end
  2213.     movem.l    (sp)+,d0-d7/a0-a6
  2214.     rts
  2215.     
  2216. rotfil                ;solid poly's
  2217.     movem.l    d0-d7/a0-a6,-(sp)
  2218.  
  2219.     bsr    line_init1        ;eventueel tabel vullen
  2220.     lea    xy,a2
  2221.     bsr    rotsor        ;poly's sorteren
  2222.  
  2223.     cmp.w    #-1,d1        ;geen ?
  2224.     beq    rotfil.end
  2225.  
  2226.     move.w    d1,d3        ;aantal polies
  2227.     move.w    d1,d4        ;aantal polies
  2228.  
  2229. rotfil.fa
  2230.     lea    rotdontab,a4    ;done tabel
  2231.     sub.l    a1,a1
  2232.     move.w    #$7fff,d6        ;maximale z positie
  2233.     move.w    d3,d2        ;aantal poly's
  2234. rotfil.ca
  2235.     move.w    4(a4),d0        ;poly z
  2236.     beq.s    rotfil.aa        ;leeg ?
  2237.     cmp.w    d6,d0        ;z positie groter ?
  2238.     bge.s    rotfil.aa
  2239.     move.l    a4,a1
  2240.     move.w    d0,d6
  2241. rotfil.aa
  2242.     lea    6(a4),a4
  2243.     dbra    d2,rotfil.ca
  2244.  
  2245.     cmp.l    #0,a1
  2246.     beq    rotfil.end        ;voortijdige ejaculatie
  2247.     clr.w    4(a1)        ;poly wissen
  2248.  
  2249.     movem.l    d0-d7/a0-a6,-(sp)
  2250.     move.l    (a1),a1        ;poly halen
  2251.     move.w    (a1)+,d7        ;aantal lijnen
  2252.     move.w    (a1)+,a0        ;kleur
  2253.  
  2254.     moveq.l    #0,d0
  2255.     moveq.l    #0,d1
  2256.     moveq.l    #0,d2
  2257.     moveq.l    #0,d3
  2258.     move.l    #$7fff,d4        ;minimale x
  2259.     move.l    #$7fff,d5        ;minimale y
  2260.     sub.l    a3,a3        ;maximale x
  2261.     sub.l    a4,a4        ;maximale y
  2262. rotfil.bx
  2263.     move.w    (a1)+,d2
  2264.     subq.w    #1,d2
  2265.     muls    #6,d2
  2266.     movem.w    (a2,d2.w),d0-d1    ;x1,y1
  2267.     move.w    (a1)+,d2
  2268.     subq.w    #1,d2
  2269.     muls    #6,d2
  2270.     movem.w    (a2,d2.w),d2-d3    ;x2,y2
  2271.  
  2272.     bsr    line        ;lijn tekenen
  2273.  
  2274.     cmp.w    d4,d0        ;minimale x halen
  2275.     bge.s    rotfil.ba
  2276.     move.w    d0,d4
  2277. rotfil.ba
  2278.     cmp.w    d4,d2
  2279.     bge.s    rotfil.bb
  2280.     move.w    d2,d4
  2281. rotfil.bb
  2282.     cmp.w    d5,d1        ;minimale y halen
  2283.     bge.s    rotfil.bc
  2284.     move.w    d1,d5
  2285. rotfil.bc
  2286.     cmp.w    d5,d3
  2287.     bge.s    rotfil.bd
  2288.     move.w    d3,d5
  2289. rotfil.bd
  2290.  
  2291.     move.l    a3,d6
  2292.     cmp.w    d6,d0        ;maximale x halen
  2293.     ble.s    rotfil.be
  2294.     move.w    d0,a3
  2295. rotfil.be
  2296.     cmp.w    d6,d2
  2297.     ble.s    rotfil.bf
  2298.     move.w    d2,a3
  2299. rotfil.bf
  2300.  
  2301.     move.l    a4,d6
  2302.     cmp.w    d6,d1        ;maximale y halen
  2303.     ble.s    rotfil.bg
  2304.     move.w    d1,a4
  2305. rotfil.bg
  2306.     cmp.w    d6,d3
  2307.     ble.s    rotfil.bh
  2308.     move.w    d3,a4
  2309. rotfil.bh
  2310.  
  2311.     dbra    d7,rotfil.bx
  2312.  
  2313.     bsr    rotpolfil
  2314.  
  2315. rotfil.noline
  2316.     movem.l    (sp)+,d0-d7/a0-a6
  2317.  
  2318. rotfil.ea
  2319.     dbra    d4,rotfil.fa
  2320.  
  2321. rotfil.end
  2322.     movem.l    (sp)+,d0-d7/a0-a6
  2323.     rts
  2324.     
  2325. rotsym                ;solid lines
  2326.     movem.l    d0-d7/a0-a6,-(sp)
  2327.  
  2328.     bsr    line_init1        ;eventueel tabel vullen
  2329.     lea    xy,a2
  2330.     bsr    rotsor        ;poly's sorteren d1=aantal
  2331.  
  2332.     cmp.w    #-1,d1        ;geen ?
  2333.     beq    rotsym.end
  2334.  
  2335.     move.w    d1,d3        ;aantal polies
  2336.     add.w    #2,d1
  2337.     lsr.w    #1,d1        ;/2
  2338.     sub.w    #1,d1
  2339.  
  2340.     tst.w    d1
  2341.     beq.s    rotsym.plot        ;maar 1 poly !
  2342.     
  2343.     move.w    d1,d4        ;aantal te wissen polies
  2344. rotsym.f
  2345.     lea    rotdontab,a4    ;done tabel
  2346.     move.w    #$7fff,d6        ;maximale z positie
  2347.     move.w    d3,d2        ;aantal poly's
  2348. rotsym.c
  2349.     move.w    4(a4),d0        ;poly z
  2350.     beq.s    rotsym.a        ;leeg ?
  2351.     cmp.w    d6,d0        ;z positie groter ?
  2352.     bgt.s    rotsym.a
  2353.     move.l    a4,a1
  2354.     move.w    d0,d6
  2355. rotsym.a
  2356.     lea    6(a4),a4
  2357.     dbra    d2,rotsym.c
  2358.     clr.w    4(a1)        ;poly wissen
  2359. rotsym.e
  2360.     dbra    d4,rotsym.f
  2361.     
  2362. rotsym.plot
  2363.     move.w    d3,d4        ;aantal polies
  2364.     sub.w    d1,d4        ;- aantal te wissen polies
  2365. rotsym.fa
  2366.     lea    rotdontab,a4    ;done tabel
  2367.     sub.l    a1,a1
  2368.     move.w    #$7fff,d6        ;maximale z positie
  2369.     move.w    d3,d2        ;aantal poly's
  2370. rotsym.ca
  2371.     move.w    4(a4),d0        ;poly z
  2372.     beq.s    rotsym.aa        ;leeg ?
  2373.     cmp.w    d6,d0        ;z positie groter ?
  2374.     bge.s    rotsym.aa
  2375.     move.l    a4,a1
  2376.     move.w    d0,d6
  2377. rotsym.aa
  2378.     lea    6(a4),a4
  2379.     dbra    d2,rotsym.ca
  2380.  
  2381.     cmp.l    #0,a1
  2382.     beq    rotsym.end        ;voortijdige ejaculatie
  2383.     clr.w    4(a1)        ;poly wissen
  2384.  
  2385.     movem.l    d0-d7/a0-a6,-(sp)
  2386.     move.l    (a1),a1        ;poly halen
  2387.     move.w    (a1)+,d7        ;aantal lijnen
  2388.     move.w    (a1)+,a0        ;kleur
  2389.  
  2390.     moveq.l    #0,d0
  2391.     moveq.l    #0,d1
  2392.     moveq.l    #0,d2
  2393.     moveq.l    #0,d3
  2394.     move.l    #$7fff,d4        ;minimale x
  2395.     move.l    #$7fff,d5        ;minimale y
  2396.     sub.l    a3,a3        ;maximale x
  2397.     sub.l    a4,a4        ;maximale y
  2398. rotsym.bx
  2399.     move.w    (a1)+,d2
  2400.     subq.w    #1,d2
  2401.     muls    #6,d2
  2402.     movem.w    (a2,d2.w),d0-d1    ;x1,y1
  2403.     move.w    (a1)+,d2
  2404.     subq.w    #1,d2
  2405.     muls    #6,d2
  2406.     movem.w    (a2,d2.w),d2-d3    ;x2,y2
  2407.  
  2408.     bsr    line        ;lijn tekenen
  2409.  
  2410.     cmp.w    d4,d0        ;minimale x halen
  2411.     bge.s    rotsym.ba
  2412.     move.w    d0,d4
  2413. rotsym.ba
  2414.     cmp.w    d4,d2
  2415.     bge.s    rotsym.bb
  2416.     move.w    d2,d4
  2417. rotsym.bb
  2418.     cmp.w    d5,d1        ;minimale y halen
  2419.     bge.s    rotsym.bc
  2420.     move.w    d1,d5
  2421. rotsym.bc
  2422.     cmp.w    d5,d3
  2423.     bge.s    rotsym.bd
  2424.     move.w    d3,d5
  2425. rotsym.bd
  2426.  
  2427.     move.l    a3,d6
  2428.     cmp.w    d6,d0        ;maximale x halen
  2429.     ble.s    rotsym.be
  2430.     move.w    d0,a3
  2431. rotsym.be
  2432.     cmp.w    d6,d2
  2433.     ble.s    rotsym.bf
  2434.     move.w    d2,a3
  2435. rotsym.bf
  2436.  
  2437.     move.l    a4,d6
  2438.     cmp.w    d6,d1        ;maximale y halen
  2439.     ble.s    rotsym.bg
  2440.     move.w    d1,a4
  2441. rotsym.bg
  2442.     cmp.w    d6,d3
  2443.     ble.s    rotsym.bh
  2444.     move.w    d3,a4
  2445. rotsym.bh
  2446.  
  2447.     dbra    d7,rotsym.bx
  2448.  
  2449.     bsr    rotpolfil
  2450.  
  2451. rotsym.noline
  2452.     movem.l    (sp)+,d0-d7/a0-a6
  2453.  
  2454. rotsym.ea
  2455.     dbra    d4,rotsym.fa
  2456.  
  2457. rotsym.end
  2458.     movem.l    (sp)+,d0-d7/a0-a6
  2459.     rts
  2460.     
  2461. rotsor                ;polies sorteren
  2462.     movem.l    d2-d7/a0-a6,-(sp)
  2463.  
  2464.     move.l    curvec-rot(a6),a1
  2465.     add.l    4(a1),a1
  2466.     add.l    #vec_xyz,a1        ;info overslaan
  2467.  
  2468.     lea    rotdontab,a4    ;done tabel wissen
  2469.     moveq.l    #0,d7
  2470.     move.w    (a1)+,d6        ;aantal polies
  2471.     move.w    d6,d1
  2472.  
  2473.     cmp.w    #-1,d1        ;geen ?
  2474.     beq.s    rotsor.end
  2475.  
  2476. rotsor.h
  2477.     move.w    (a1),d7        ;aantal lijnen
  2478.     move.w    d7,d3        ;aantal lijnen
  2479.     add.w    #1,d3
  2480.     
  2481.     move.l    a1,(a4)+        ;poly opslaan
  2482.     lea    4(a1),a1        ;+kleur
  2483.     moveq.l    #0,d0        ;gemiddelde z positie
  2484. ;    moveq.l    #0,d2
  2485.     moveq.l    #0,d4        ;gemiddelde z positie
  2486. rotsor.dx
  2487.     move.w    (a1)+,d2        ;coordinaat nummer
  2488.     subq.w    #1,d2
  2489.     muls    #6,d2
  2490.     move.w    4(a2,d2.w),d4    ;z
  2491.     lea    2(a1),a1        ;2de coordinaat overslaan
  2492. ;    cmp.w    d2,d4
  2493. ;    ble    rotsor.da
  2494. ;    move.w    d4,d2
  2495. ;rotsor.da
  2496.     add.l    d4,d0
  2497.     dbra    d7,rotsor.dx
  2498. ;    add.l    d2,d0        ;+hoogste z-positie
  2499.     divs    d3,d0        ;/aantal lijnen
  2500.     move.w    d0,(a4)+        ;poly gem. z opslaan
  2501.  
  2502. ;    lea    2(a1),a1
  2503.     dbra    d6,rotsor.h
  2504. rotsor.g
  2505. rotsor.end
  2506.     movem.l    (sp)+,d2-d7/a0-a6
  2507.     rts
  2508.  
  2509. rotgls                ;solid lines
  2510.     movem.l    d0-d7/a0-a6,-(sp)
  2511.  
  2512.     bsr    line_init1        ;eventueel tabel vullen
  2513.  
  2514.     move.l    curvec-rot(a6),a1
  2515.     add.l    4(a1),a1
  2516.     add.l    #vec_xyz,a1        ;info overslaan
  2517.  
  2518.     move.w    (a1)+,d6        ;aantal polies
  2519.     cmp.w    #-1,d6        ;geen ?
  2520.     beq    rotgls.end
  2521.     
  2522.     lea    xy,a2
  2523. rotgls.a
  2524.     move.w    (a1)+,d7        ;aantal lijnen
  2525.     move.w    (a1)+,a0        ;kleur
  2526.  
  2527.     moveq.l    #0,d0
  2528.     moveq.l    #0,d1
  2529.     moveq.l    #0,d2
  2530.     moveq.l    #0,d3
  2531.     move.l    #$7fff,d4        ;minimale x
  2532.     move.l    #$7fff,d5        ;minimale y
  2533.     sub.l    a3,a3        ;maximale x
  2534.     sub.l    a4,a4        ;maximale y
  2535. rotgls.bx
  2536.     move.w    (a1)+,d2
  2537.     subq.w    #1,d2
  2538.     muls    #6,d2
  2539.     movem.w    (a2,d2.w),d0-d1    ;x1,y1
  2540.     move.w    (a1)+,d2
  2541.     subq.w    #1,d2
  2542.     muls    #6,d2
  2543.     movem.w    (a2,d2.w),d2-d3    ;x2,y2
  2544.  
  2545.     bsr    line        ;lijn tekenen
  2546.  
  2547.     cmp.w    d4,d0        ;minimale x halen
  2548.     bge.s    rotgls.ba
  2549.     move.w    d0,d4
  2550. rotgls.ba
  2551.     cmp.w    d4,d2
  2552.     bge.s    rotgls.bb
  2553.     move.w    d2,d4
  2554. rotgls.bb
  2555.     cmp.w    d5,d1        ;minimale y halen
  2556.     bge.s    rotgls.bc
  2557.     move.w    d1,d5
  2558. rotgls.bc
  2559.     cmp.w    d5,d3
  2560.     bge.s    rotgls.bd
  2561.     move.w    d3,d5
  2562. rotgls.bd
  2563.  
  2564.     move.l    d6,-(sp)
  2565.     move.l    a3,d6
  2566.     cmp.w    d6,d0        ;maximale x halen
  2567.     ble.s    rotgls.be
  2568.     move.w    d0,a3
  2569. rotgls.be
  2570.     cmp.w    d6,d2
  2571.     ble.s    rotgls.bf
  2572.     move.w    d2,a3
  2573. rotgls.bf
  2574.  
  2575.     move.l    a4,d6
  2576.     cmp.w    d6,d1        ;maximale y halen
  2577.     ble.s    rotgls.bg
  2578.     move.w    d1,a4
  2579. rotgls.bg
  2580.     cmp.w    d6,d3
  2581.     ble.s    rotgls.bh
  2582.     move.w    d3,a4
  2583. rotgls.bh
  2584.     move.l    (sp)+,d6
  2585.     
  2586.     dbra    d7,rotgls.bx
  2587.  
  2588.     bsr    rotpolgls
  2589.  
  2590.     dbra    d6,rotgls.a
  2591.  
  2592. rotgls.end
  2593.     movem.l    (sp)+,d0-d7/a0-a6
  2594.     rts
  2595.     
  2596. rotpolfil                ;d4/d5/a3/a4
  2597.     movem.l    d0-d7/a0-a6,-(sp)
  2598.     lea    rotpln1,a2
  2599.     move.l    a2,a1
  2600.     add.l    #rotplnw-rotpln1,a1    ;workplane
  2601.     add.l    real-rot(a6),a2    ;get scherm 2
  2602.  
  2603.     move.w    #rot_wid,d7        ;wordt modulo
  2604.  
  2605.     sub.w    #16,d4        ;ruimte voor min x
  2606.     add.w    #16,a3        ;ruimte voor max x
  2607.  
  2608. ;    sub.w    #2,d5        ;ruimte voor min y
  2609.     add.w    #1,a4        ;ruimte voor max y
  2610.     
  2611.     move.w    a4,d0        ;maximale y
  2612.     sub.w    d5,d0        ;-minimale y
  2613.     move.w    d0,d2        ;y hoogte (in lijnen)
  2614.     lsl.w    #6,d0        ;*64
  2615.  
  2616.     move.w    a3,d1        ;maximale x
  2617.     sub.w    d4,d1        ;-minimale x
  2618.     lsr.w    #4,d1        ;/16
  2619.     move.w    d1,d3        ;x breedte (in words)
  2620.     add.w    d1,d0        ;bltsize
  2621.     
  2622.     muls    #rot_wid,d5        ;minimale y
  2623.     add.l    d5,a1        ;+workplane
  2624.  
  2625.     lsr.l    #1,d5        ;/2 (voor hi-res)
  2626.     muls    #rot_dpt,d5        ;minimale y
  2627.     lsl.l    #1,d5        ;*2
  2628.  
  2629.  
  2630.     add.l    d5,a2        ;+destination scherm
  2631.     lsr.w    #4,d4        ;/16 minimale x
  2632.     lsl.w    #1,d4        ;*2 minimale x
  2633.     add.l    d4,a1        ;+workplane
  2634.     add.l    d4,a2        ;+destination scherm
  2635.     
  2636.     muls    #rot_wid,d2        ;y hoogte
  2637.     lsl.w    #1,d3        ;*2 x breedte
  2638.     sub.w    d3,d7        ;module aftrekken
  2639.     add.l    d3,d2
  2640.     move.l    a1,a3        ;workscherm bewaren
  2641.     add.l    d2,a1        ;reverse fill add
  2642.  
  2643.     move.l    a1,$4c(a5)            ;bltbpt
  2644.     move.l    a1,$54(a5)            ;bltdpt
  2645.     move.w    d7,$62(a5)            ;bltbmod
  2646.     move.w    d7,$66(a5)            ;bltdmod
  2647.     move    #%0000010111001100,$40(a5)    ;bltcon0
  2648.     move    #%0000000000010010,$42(a5)    ;bltcon1
  2649.     move    d0,$58(a5)            ;bltsiz
  2650.     bsr    rot.wblit            ;wait for blit
  2651.  
  2652.     add.l    #2,a3        ;reverse ?
  2653.     add.l    #2,a2        ;reverse ?
  2654.  
  2655.     move.w    #$f00+$ca,$040(a5)    ;bltcon0
  2656.     move.w    #0,$042(a5)        ;bltcon1
  2657.     move.l    #-1,$044(a5)    ;mask
  2658.  
  2659.     move.w    d7,d6
  2660.     add.w    #rot_wid*(rot_dpt-1),d6
  2661.  
  2662.     move.w    d6,$60(a5)        ;bltcmod
  2663.     move.w    d7,$62(a5)        ;bltbmod
  2664.     move.w    d7,$64(a5)        ;bltamod
  2665.     move.w    d6,$66(a5)        ;bltdmod
  2666.  
  2667.     move.w    a0,d6        ;kleur halen
  2668.  
  2669.     move.l    a3,a4        ;empty positie
  2670.     add.l    #rotplne-rotplnw,a4
  2671.  
  2672.     add.l    #rot_wid*(rot_dpt-1),a2
  2673.     move.w    #rot_dpt-1,d1
  2674. rotpolfil.a
  2675.     move.l    a3,d2
  2676.     btst    d1,d6        ;kleurnbit test
  2677.  
  2678. ;    beq    rotpolfil.bx        ;doorschijnend
  2679.  
  2680.     bne.s    rotpolfil.c
  2681.     move.l    a4,d2        ;solid
  2682. rotpolfil.c
  2683.     move.l    a2,$48(a5)        ;bltcpt destination
  2684.     move.l    d2,$4c(a5)        ;bltbpt picture
  2685.     move.l    a3,$50(a5)        ;bltapt mask
  2686.     move.l    a2,$54(a5)        ;bltdpt destination
  2687.     move.w    d0,$58(a5)
  2688.     bsr    rot.wblit        ;work > view
  2689. rotpolfil.bx
  2690.     sub.l    #rot_wid,a2
  2691.     dbra    d1,rotpolfil.a
  2692.  
  2693.     move.w    #0,$074(a5)        ;a dat
  2694.     move.l    #0,$044(a5)        ;mask
  2695.     move.w    #$100+$f0,$040(a5)    ;bltcon0
  2696.     move.w    d7,$66(a5)        ;bltdmod
  2697.  
  2698.     move.l    a3,$054(a5)        ;destination
  2699.     move.w    d0,$58(a5)
  2700.     bsr    rot.wblit        ;clr work
  2701.  
  2702.     movem.l    (sp)+,d0-d7/a0-a6
  2703.     rts
  2704.     
  2705. rotpolgls                ;d4/d5/a3/a4
  2706.     movem.l    d0-d7/a0-a6,-(sp)
  2707.     lea    rotpln1,a2
  2708.     move.l    a2,a1
  2709.     add.l    #rotplnw-rotpln1,a1    ;workplane
  2710.     add.l    real-rot(a6),a2    ;get scherm 2
  2711.  
  2712.  
  2713.     move.w    #rot_wid,d7        ;wordt modulo
  2714.  
  2715.     sub.w    #16,d4        ;ruimte voor min x
  2716.     add.w    #16,a3        ;ruimte voor max x
  2717.  
  2718. ;    sub.w    #2,d5        ;ruimte voor min y
  2719.     add.w    #1,a4        ;ruimte voor max y
  2720.     
  2721.     move.w    a4,d0        ;maximale y
  2722.     sub.w    d5,d0        ;-minimale y
  2723.     move.w    d0,d2        ;y hoogte (in lijnen)
  2724.     lsl.w    #6,d0        ;*64
  2725.  
  2726.     move.w    a3,d1        ;maximale x
  2727.     sub.w    d4,d1        ;-minimale x
  2728.     lsr.w    #4,d1        ;/16
  2729.     move.w    d1,d3        ;x breedte (in words)
  2730.     add.w    d1,d0        ;bltsize
  2731.     
  2732.     muls    #rot_wid,d5        ;minimale y
  2733.     add.l    d5,a1        ;+workplane
  2734.  
  2735.     lsr.l    #1,d5        ;/2 (voor hi-res)
  2736.     muls    #rot_dpt,d5        ;minimale y
  2737.     lsl.l    #1,d5        ;*2
  2738.  
  2739.     add.l    d5,a2        ;+destination scherm
  2740.     lsr.w    #4,d4        ;/16 minimale x
  2741.     lsl.w    #1,d4        ;*2 minimale x
  2742.     add.l    d4,a1        ;+workplane
  2743.     add.l    d4,a2        ;+destination scherm
  2744.     
  2745.     muls    #rot_wid,d2        ;y hoogte
  2746.     lsl.w    #1,d3        ;*2 x breedte
  2747.     sub.w    d3,d7        ;module aftrekken
  2748.     add.l    d3,d2
  2749.     move.l    a1,a3        ;workscherm bewaren
  2750.     add.l    d2,a1        ;reverse fill add
  2751.  
  2752.     move.l    a1,$4c(a5)            ;bltbpt
  2753.     move.l    a1,$54(a5)            ;bltdpt
  2754.     move.w    d7,$62(a5)            ;bltbmod
  2755.     move.w    d7,$66(a5)            ;bltdmod
  2756.     move    #%0000010111001100,$40(a5)    ;bltcon0
  2757.     move    #%0000000000010010,$42(a5)    ;bltcon1
  2758.     move    d0,$58(a5)            ;bltsiz
  2759.     bsr    rot.wblit            ;wait for blit
  2760.  
  2761.     add.l    #2,a3        ;reverse ?
  2762.     add.l    #2,a2        ;reverse ?
  2763.  
  2764.     move.w    #$f00+$ca,$040(a5)    ;bltcon0
  2765.     move.w    #0,$042(a5)        ;bltcon1
  2766.     move.l    #-1,$044(a5)    ;mask
  2767.  
  2768.     move.w    d7,d6
  2769.     add.w    #rot_wid*(rot_dpt-1),d6
  2770.  
  2771.     move.w    d6,$60(a5)        ;bltcmod
  2772.     move.w    d7,$62(a5)        ;bltbmod
  2773.     move.w    d7,$64(a5)        ;bltamod
  2774.     move.w    d6,$66(a5)        ;bltdmod
  2775.  
  2776.     move.w    a0,d6        ;kleur halen
  2777.  
  2778.     move.l    a3,a4        ;empty positie
  2779.     add.l    #rotplne-rotplnw,a4
  2780.  
  2781.     add.l    #rot_wid*(rot_dpt-1),a2
  2782.     move.w    #rot_dpt-1,d1
  2783. rotpolgls.a
  2784.     move.l    a3,d2
  2785.     btst    d1,d6        ;kleurnbit test
  2786.     beq.s    rotpolgls.bx        ;doorschijnend
  2787.  
  2788. ;    bne    rotpolgls.c
  2789. ;    move.l    a4,d2        ;solid
  2790. ;rotpolgls.c
  2791.  
  2792.     move.l    a2,$48(a5)        ;bltcpt destination
  2793.     move.l    d2,$4c(a5)        ;bltbpt picture
  2794.     move.l    a3,$50(a5)        ;bltapt mask
  2795.     move.l    a2,$54(a5)        ;bltdpt destination
  2796.     move.w    d0,$58(a5)
  2797.     bsr    rot.wblit        ;work > view
  2798. rotpolgls.bx
  2799.     sub.l    #rot_wid,a2
  2800.     dbra    d1,rotpolgls.a
  2801.  
  2802.     move.w    #0,$074(a5)        ;a dat
  2803.     move.l    #0,$044(a5)        ;mask
  2804.     move.w    #$100+$f0,$040(a5)    ;bltcon0
  2805.     move.w    d7,$66(a5)        ;bltdmod
  2806.     move.l    a3,$054(a5)        ;destination
  2807.     move.w    d0,$58(a5)
  2808.     bsr    rot.wblit        ;clr work
  2809.  
  2810.     movem.l    (sp)+,d0-d7/a0-a6
  2811.     rts
  2812.     
  2813. line
  2814.     movem.l    d0-d7/a0-a6,-(sp)
  2815.     lea    mt,a0        ;scherm breedte tabel
  2816.  
  2817.     cmp.w    d1,d3        ;y1=y2 ?
  2818.     beq    line.end
  2819.     bgt.s    nohi
  2820.     exg    d0,d2
  2821.     exg    d1,d3
  2822. nohi
  2823.     move    d0,d4
  2824.     move    d1,d5
  2825.  
  2826.     add    d5,d5
  2827.     add    d5,d5        ;*4
  2828.  
  2829.     move.l    a6,a1
  2830.     add.l    #rotplnw-rot,a1
  2831.  
  2832.     add.l    (a0,d5.w),a1    ;y raw
  2833.  
  2834.     lsr    #4,d4        ;*16
  2835.     add    d4,d4        ;*2
  2836.     lea    (a1,d4.w),a1    ;x raw
  2837.  
  2838.     sub.w    d0,d2
  2839.     sub.w    d1,d3
  2840.  
  2841.     moveq    #15,d5
  2842.     and.l    d5,d0
  2843.     move.w    d0,d4
  2844.     ror.l    #4,d0
  2845.     eor.w    d5,d4
  2846.     moveq    #0,d5
  2847.     bset    d4,d5
  2848.     move.w    #4,d0
  2849.     tst.w    d2
  2850.     bpl.s    l1
  2851.     addq.w    #1,d0
  2852.     neg.w    d2
  2853. l1    cmp.w    d2,d3
  2854.     ble.s    l2
  2855.     exg    d2,d3
  2856.     subq.w    #4,d0
  2857.     add.w    d0,d0
  2858. l2    move.w    d3,d4
  2859.     sub.w    d2,d4
  2860.     add.w    d4,d4
  2861.     add.w    d4,d4
  2862.     add.w    d3,d3
  2863.     moveq    #0,d6
  2864.     move.w    d3,d6
  2865.     sub.w    d2,d6
  2866.     bpl.s    l3
  2867.     or.w    #16,d0
  2868. l3    add.w    d3,d3
  2869.     add.w    d0,d0
  2870.     add.w    d0,d0
  2871.     addq.w    #1,d2
  2872.     lsl.w    #6,d2
  2873.     addq.w    #2,d2
  2874.     swap    d3
  2875.     move.w    d4,d3
  2876.     or.l    #$0b5a0003,d0
  2877.  
  2878.     move.w    #-1,$72(a5)
  2879.     move.l    #-1,$44(a5)
  2880.     move.w    #rot_wid,$60(a5)
  2881.     move.w    #rot_wid,$66(a5)
  2882.     move.w    #$8000,$74(a5)
  2883.  
  2884.     eor.w    d5,(a1)        ;inverteert onderste punt lijn
  2885.  
  2886.     move.l    d3,$62(a5)        ;bltmod b+a
  2887.     move.w    d6,$52(a5)        ;bltapth
  2888.     move.l    a1,$48(a5)        ;bltcpt
  2889.     move.l    a1,$54(a5)        ;bltdpt
  2890.     move.l    d0,$40(a5)        ;bltcon 0+1
  2891.  
  2892.     move    d2,$58(a5)        ;bltsiz
  2893.     bsr    rot.wblit        ;wait for blit
  2894.  
  2895. line.end
  2896.     movem.l    (sp)+,d0-d7/a0-a6
  2897.     rts
  2898.  
  2899. line_init1                ;scherm breedte tabel
  2900.     movem.l    d0-d7/a0-a6,-(sp)
  2901.     lea    mt,a0        ;vullen
  2902.     tst.l    4(a0)        ;al gevuld ?
  2903.     bne.s    line_init1.end
  2904.  
  2905.     moveq    #0,d1
  2906.     move    #rot_hgt-1,d0
  2907. line_init1.a            ;scherm breedte tabel
  2908.     move.l    d1,(a0)+
  2909.     add.l    #rot_wid,d1
  2910.     dbf    d0,line_init1.a
  2911. line_init1.end
  2912.     movem.l    (sp)+,d0-d7/a0-a6
  2913.     rts
  2914.  
  2915. ;DRAWLINE-ROUTINE
  2916. ;d0 = x1
  2917. ;d1 = y1
  2918. ;d2 = x2
  2919. ;d3 = y2
  2920. ;uses d0-d6
  2921.  
  2922. DRAWLINE:
  2923.     movem.l    d0-d7/a0-a6,-(sp)
  2924.     ifnd    nodraw
  2925.  
  2926.     move.l     #rot_wid*rot_dpt,d4
  2927.     mulu     d1,d4
  2928.     moveq     #-$10,d5
  2929.     and.w     d0,d5
  2930.     lsr.w     #3,d5
  2931.     add.w     d5,d4
  2932.  
  2933.     lea    rotpln1,a0
  2934.     add.l    real-rot(a6),a0    ;get scherm 2
  2935.     add.l     a0,d4        ;raw rotplanes
  2936.     
  2937.     moveq.l     #0,d5
  2938.     sub.w     d1,d3
  2939.     roxl.b     #1,d5  
  2940.     tst.w     d3
  2941.     bge.s     Y2GY1
  2942.     neg.w     d3
  2943. Y2GY1:    sub.w     d0,d2
  2944.     roxl.b     #1,d5
  2945.     tst.w     d2
  2946.     bge.s     X2GX1
  2947.     neg.w     d2
  2948. X2GX1:    move.w     d3,d1        ;d3=deltay    d1=d3
  2949.     sub.w     d2,d1        ;d2=deltax    d1=deltay
  2950.     bge.s     DYGDX
  2951.     exg     d2,d3
  2952. DYGDX:    roxl.b     #1,d5
  2953.     move.b     octtabel(pc,d5),d5
  2954.     add.w     d2,d2        ;2*Gdelta
  2955.  
  2956.     move.w     d2,$0062(a5)    ;d2    2*Gdelta
  2957.     sub.w     d3,d2        ;2*Gdelta-Kdelta
  2958.     bge.s     SIGNNL        ;Negative then...
  2959.     or.b     #$40,d5        ;Set bit 6(=64)  van octtant waarde
  2960. SIGNNL:    move.w     d2,$0052(a5)    ;2*Gdelta-Kdelta in BLTAPTL
  2961.     sub.w     d3,d2        ;2*Gdelta-2*Kdelta
  2962.     move.w     d2,$0064(a5)    ;in BLTAMOD
  2963.  
  2964.     move.w     #$8000,$0074(a5)
  2965.     move.w     #$ffff,$0072(a5)
  2966.     move.l     #$ffffffff,$0044(a5)
  2967.     and.w     #$000f,d0
  2968.     ror.w    #4,d0
  2969.     or.w     #$0bca,d0
  2970.     move.w     d0,$0040(a5)
  2971.     move.w     d5,$0042(a5)
  2972.     move.l     d4,$0048(a5)
  2973.     move.l     d4,$0054(a5)
  2974.     move.w     #rot_wid*rot_dpt,$0060(a5)
  2975.     move.w     #rot_wid*rot_dpt,$0066(a5)
  2976.     addq.w    #1,d3
  2977.     lsl.w     #6,d3
  2978.     addq.w     #2,d3
  2979.     move.w     d3,$0058(a5)
  2980.     bsr    rot.wblit
  2981.     endc
  2982.     movem.l    (sp)+,d0-d7/a0-a6
  2983.     rts
  2984.  
  2985. octtabel:
  2986.     dc.b    0*4+1
  2987.     dc.b     4*4+1
  2988.     dc.b    2*4+1
  2989.     dc.b    5*4+1
  2990.     dc.b    1*4+1
  2991.     dc.b    6*4+1
  2992.     dc.b    3*4+1
  2993.     dc.b    7*4+1                
  2994.  
  2995.  
  2996.  
  2997.     ifd mx68882        ;68882 routines by Roger Heykoop !
  2998.  
  2999.  
  3000. VECTOR:                ;coordinaten bereken
  3001. ;         6666   8888   8888   8888   2222
  3002. ;        6      8    8 8    8 8    8      2
  3003. ;        6      8    8 8    8 8    8      2
  3004. ;        66666   8888   8888   8888   2222   optimized code
  3005. ;        6    6 8    8 8    8 8    8 2
  3006. ;        6    6 8    8 8    8 8    8 2
  3007. ;         6666   8888   8888   8888   2222
  3008.  
  3009.     movem.l    d0-d7/a0-a6,-(sp)
  3010.  
  3011.     LEA    xy,A1            ;resultaten
  3012.  
  3013.     move.l    curvec-rot(a6),a0
  3014.     add.l    #vec_xyz,a0        ;info overslaan
  3015.     ifd    copperspeed
  3016.     move.w    #$f00,$dff180
  3017.     endc
  3018. Vec_jmp:
  3019.     Fmove.w    XROT-rot(a6),Fp6    ;x rotatie in Fp0
  3020.     Fmove.w    YROT-rot(a6),Fp7    ;y rotatie in Fp1
  3021.     Fmove.w    ZROT-rot(a6),Fp2    ;z rotatie in Fp2
  3022.     
  3023.     Fdiv.x    #5.729577951E1,Fp6    ;deelt rotatie door 360/2pi
  3024.     Fdiv.x    #5.729577951E1,Fp7    ;en dus wordt het resultaat
  3025.     Fdiv.x    #5.729577951E1,Fp2    ;tussen on en 2pi  !!!
  3026.  
  3027.     Fsin.x    Fp2,Fp4
  3028.     Fcos.x    Fp2,Fp5
  3029.     Fsin.x    Fp6,Fp0
  3030.     Fcos.x    Fp6,Fp1
  3031.     Fsin.x    Fp7,Fp2
  3032.     Fcos.x    Fp7,Fp3
  3033.  
  3034.     MOVE.W    (a0)+,D7        ;aantal punten
  3035.  
  3036. VECS:
  3037. ;Fp0/Fp1/Fp2 zijn de rotatie angles ax ay en az van 0 tot 2pi
  3038. ;Het resultaat na roteren x' y' en z' is:
  3039. ; X'= X(         cosay * cosaz) - Y(         cosay * sinaz) + Z(sinax)
  3040. ; Y'= X( sinax * sinay * cosaz) + Y(-sinax * sinay * sinaz) + Y(cosax * cosaz) - Z(sinax * sinay)
  3041. ; Z'= X(-cosax * sinay * cosaz) + X( sinax * sinaz) + Y(cosax * sinay * sinaz) + Y(sinax * cosaz) + Z(cosax*cosay)
  3042. ;
  3043. ;Vervang vervolgens:  sin ax  Fp0
  3044. ;                     cos ax  Fp1
  3045. ;                     sin ay  Fp2
  3046. ;                     cos ay  Fp3
  3047. ;                     sin az  Fp4
  3048. ;                     cos az  Fp5
  3049. ;
  3050. ; X'= X(     Fp3*Fp5) -               Y(     Fp3*Fp4)              + Z(Fp0)
  3051. ; Y'= X( Fp0*Fp2*Fp5) +               Y(-Fp0*Fp2*Fp4) + Y(Fp1*Fp5) - Z(Fp0*Fp2)
  3052. ; Z'= X(-Fp1*Fp2*Fp5) + X( Fp0*Fp4) + Y( Fp1*Fp2*Fp4) + Y(Fp0*Fp5) + Z(Fp1*Fp3)
  3053. ;
  3054. ; X'= X*Fp3*Fp5                  - Y*Fp3*Fp4                  + Z*Fp0
  3055. ; Y'= X*Fp0*Fp2*Fp5  +             Y*-Fp0*Fp2*Fp4 + Y*Fp1*Fp5 - Z*Fp0*Fp2
  3056. ; Z'= X*-Fp1*Fp2*Fp5 + X*Fp0*Fp4 + Y*Fp1*Fp2*Fp4  + Y*Fp0*Fp5 + Z*Fp1*Fp3
  3057.  
  3058.  
  3059.         movem.w    (a0)+,d4/d5/d6    ;Haal x,y en z uit geheugen...
  3060.                 ;1 memory access,spaart bergen tijd...
  3061.  
  3062. ;input: d4/d5/d6  x,y,z
  3063.     Fmove.w    d4,Fp6        ;haal x
  3064.     Fmove.x    Fp6,Fp7
  3065.     Fmul.x    Fp3,Fp7
  3066.     Fmul.x    Fp5,Fp7
  3067.     Fmove.l    Fp7,d1        ;x' deel 1...
  3068.     Fmove.x    Fp6,Fp7
  3069.     Fmul.x    Fp0,Fp7
  3070.     Fmul.x    Fp2,Fp7
  3071.     Fmul.x    Fp5,Fp7
  3072.     Fmove.l    Fp7,d2        ;y' deel 1...
  3073.     Fmove.x    Fp6,Fp7
  3074.     Fmul.x    Fp1,Fp7
  3075.     Fmul.x    Fp2,Fp7
  3076.     Fmul.x    Fp5,Fp7
  3077.     Fmove.l    Fp7,d0
  3078.     move.l    d0,d3
  3079.     neg.l    d3        ;z' deel 1a...
  3080.     Fmove.x    Fp6,Fp7
  3081.     Fmul.x    Fp0,Fp7
  3082.     Fmul.x    Fp4,Fp7
  3083.     Fmove.l    Fp7,d0
  3084.     add.l    d0,d3        ;z' deel 1b...
  3085.  
  3086.     Fmove.w    d5,Fp6           ;haal y
  3087.     Fmove.x    Fp6,Fp7
  3088.     Fmul.x    Fp3,Fp7
  3089.     Fmul.x    Fp4,Fp7
  3090.     Fmove.l    Fp7,d0
  3091.     sub.l    d0,d1        ;x' deel 2...
  3092.         Fmove.x    Fp6,Fp7
  3093.     Fmul.x    Fp0,Fp7
  3094.     Fmul.x    Fp2,Fp7
  3095.     Fmul.x    Fp4,Fp7
  3096.     Fmove.l    Fp7,d0
  3097.     sub.l    d0,d2        ;y' deel 2a...
  3098.     Fmove.x    Fp6,Fp7
  3099.     Fmul.x    Fp1,Fp7
  3100.     Fmul.x    Fp5,Fp7
  3101.     Fmove.l    Fp7,d0
  3102.     add.l    d0,d2        ;y' deel 2b...
  3103.     Fmove.x    Fp6,Fp7
  3104.     Fmul.x    Fp1,Fp7
  3105.     Fmul.x    Fp2,Fp7
  3106.     Fmul.x    Fp4,Fp7
  3107.         Fmove.l    Fp7,d0
  3108.     add.l    d0,d3        ;z' deel 2a...
  3109.     Fmove.x    Fp6,Fp7
  3110.     Fmul.x    Fp0,Fp7
  3111.     Fmul.x    Fp5,Fp7
  3112.         Fmove.l    Fp7,d0
  3113.     add.l    d0,d3        ;z' deel 2b...
  3114.  
  3115.     Fmove.w    d6,Fp6        ;haal z
  3116.     Fmove.x    Fp6,Fp7
  3117.     Fmul.x    Fp0,Fp7
  3118.     Fmove.l    Fp7,d0
  3119.     add.l   d0,d1        ;x' deel 3...
  3120.     Fmove.x    Fp6,Fp7
  3121.         Fmul.x    Fp0,Fp7
  3122.     Fmul.x    Fp3,Fp7
  3123.     Fmove.l    Fp7,d0
  3124.     sub.l    d0,d2        ;y' deel 3...
  3125.     Fmove.x    Fp6,Fp7
  3126.     Fmul.x    Fp1,Fp7
  3127.     Fmul.x    Fp3,Fp7
  3128.     Fmove.l    Fp7,d0
  3129.     add.l    d0,d3        ;z' deel 3...
  3130.  
  3131. ;nu: d1/d2/d3 bevat x'y'z'...
  3132.  
  3133.  
  3134.     move.w    d3,d4
  3135.     add.w    ZV-rot(a6),d4        ;z ball
  3136.     sub.w    ZV-rot(a6),D3        ;z centrum
  3137.     move.w    drot-rot(a6),d0        ;grote wereld
  3138.     muls    d0,D1            ;muls !
  3139.     divs    D3,D1            ;divs !
  3140.     add.W    XV-rot(a6),D1        ;x centrum
  3141.     muls    d0,D2            ;muls !
  3142.     divs    D3,D2            ;divs !
  3143.     add.w    YV-rot(a6),D2        ;y centrum
  3144.  
  3145.     muls    d0,D4            ;muls ! z ball
  3146.  
  3147.     ifeq    rot_hgt-384
  3148.     lsr.l    #8,d4            ;/256
  3149.     lsr.l    #3,d4            ;/2
  3150.     move.w    d4,d3
  3151.     lsr.w    #1,d4            ;/2
  3152.     add.w    d3,d4
  3153.     endc
  3154.  
  3155.     ifeq    rot_hgt-(384*2)        ;/6144
  3156.     lsr.l    #8,d4            ;/256
  3157.     lsr.l    #4,d4            ;/4
  3158.     move.w    d4,d3
  3159.     lsr.w    #1,d4            ;/2
  3160.     add.w    d3,d4
  3161.     endc
  3162.  
  3163.      movem.w d1/d2/d4,(a1)
  3164.      add.l    #3*2,a1
  3165.  
  3166. ;    lea    2(a0),a0
  3167.     add.l    #2,a0            ;kleur
  3168.     Dbra    D7,VECS                 ;Ah! A loop...Are the caches
  3169.                     ;on mr. Zulu? Warp factor 9,sir!
  3170.  
  3171.     ifd    copperspeed
  3172.     move.w    #$000,$dff180
  3173.     endc
  3174.     movem.l    (sp)+,d0-d7/a0-a6
  3175.     RTS
  3176.  
  3177.     endc
  3178.     ifnd mx68882
  3179. VECTOR:                ;coordinaten bereken
  3180.     movem.l    d0-d7/a0-a6,-(sp)
  3181.  
  3182.     LEA    xy,A1
  3183.     LEA    SINCOS+$5a,A2
  3184.  
  3185.     ifd    copperspeed
  3186.     move.w    #$f00,$dff180
  3187.     endc
  3188.  
  3189.     move.l    curvec-rot(a6),a0
  3190.     add.l    #vec_xyz,a0        ;info overslaan
  3191.  
  3192.     MOVE.W    (a0)+,D7        ;aantal punten
  3193.  
  3194. VECS:
  3195.     MOVE.W    (A0)+,D0        ;x
  3196.     MOVE.W    D0,D2        ;
  3197.  
  3198.     MOVE.W    (A0)+,D1        ;y
  3199.     MOVE.W    D1,D3        ;
  3200.     MOVE.W    ZROT-rot(a6),D6    ;
  3201.     MOVE.W    $5a(A2,D6.W),D4    ;
  3202.     MOVE.W    -$5a(A2,D6.W),D5    ;
  3203.     MULS.W    D4,D0        ;
  3204.     MULS.W    D5,D1        ;
  3205.     SUB.L    D1,D0        ;
  3206.     ADD.L    D0,D0        ;
  3207.     SWAP    D0        ;
  3208.     MULS.W    D5,D2        ;muls !
  3209.     MULS.W    D4,D3        ;muls !
  3210.     ADD.L    D3,D2        ;
  3211.     ADD.L    D2,D2
  3212.     SWAP    D2        ;
  3213.     MOVE.W    D2,D4        ;
  3214.  
  3215.     MOVE.W    (A0)+,D1        ;z
  3216.     MOVE.W    D1,D3        ;
  3217.  
  3218.         MOVE.W    XROT-rot(a6),D6    ;x-rot
  3219.     MOVE.W    $5a(A2,D6.W),D5    ;
  3220.     MOVE.W    -$5a(A2,D6.W),D6    ;
  3221.     MULS.W    D5,D2        ;muls !
  3222.     MULS.W    D6,D1        ;muls !
  3223.  
  3224.     SUB.L    D1,D2        ;
  3225.     ADD.L    D2,D2
  3226.     SWAP    D2        ;
  3227.     MULS.W    D5,D3        ;muls !
  3228.     MULS.W    D6,D4        ;muls !
  3229.     ADD.L    D4,D3        ;
  3230.     ADD.L    D3,D3            
  3231.     SWAP    D3        ;
  3232.     MOVE.W    D0,D1        ;
  3233.     MOVE.W    D3,D4        ;
  3234.  
  3235.     MOVE.W    YROT-rot(a6),D6    ;y-rot
  3236.     MOVE.W    $5a(A2,D6.W),D5    ;
  3237.     MOVE.W    -$5a(A2,D6.W),D6    ;
  3238.     MULS.W    D5,D3        ;
  3239.     MULS.W    D6,D0        ;
  3240.     SUB.L    D0,D3        ;
  3241.     ADD.L    D3,D3
  3242.     SWAP    D3        ;
  3243.     MULS.W    D6,D4        ;muls !
  3244.     MULS.W    D5,D1        ;muls !
  3245.     ADD.L    D4,D1        ;
  3246.     ADD.L    D1,D1
  3247.     SWAP    D1        ;d1=x d2=y d3=z  na rotatie
  3248.  
  3249.     move.w    d3,d4
  3250.     add.W    ZV-rot(a6),d4    ;z ball
  3251.  
  3252.     SUB.W    ZV-rot(a6),D3    ;z centrum
  3253.  
  3254.     move.w    DROT-rot(a6),d0    ;grote wereld
  3255.     MULS    d0,D1        ;muls !
  3256.     DIVS    D3,D1        ;divs !
  3257.  
  3258.     ADD.W    XV-rot(a6),D1    ;x centrum
  3259.     MULS    d0,D2        ;muls !
  3260.     DIVS    D3,D2        ;divs !
  3261.  
  3262.     ADD.W    YV-rot(a6),D2    ;y centrum
  3263.  
  3264.     MOVE.W    D1,(A1)+        ;x
  3265.     MOVE.W    D2,(A1)+        ;y
  3266.  
  3267.     MULS    d0,D4        ;muls ! z ball
  3268.  
  3269. ;    divs    #rot_hgt*20,d4    ;divs !
  3270.  
  3271.     ifeq    rot_hgt-384
  3272.     lsr.l    #8,d4        ;/256
  3273.     lsr.l    #3,d4        ;/2
  3274.     move.w    d4,d3
  3275.     lsr.w    #1,d4        ;/2
  3276.     add.w    d3,d4
  3277.     endc
  3278.  
  3279.     ifeq    rot_hgt-(384*2)    ;/6144
  3280.     lsr.l    #8,d4        ;/256
  3281.     lsr.l    #4,d4        ;/4
  3282.     move.w    d4,d3
  3283.     lsr.w    #1,d4        ;/2
  3284.     add.w    d3,d4
  3285.     endc
  3286.         
  3287.     MOVE.W    d4,(A1)+        ;z
  3288.  
  3289.     lea    2(a0),a0
  3290. ;    add.l    #2,a0        ;kleur
  3291.     Dbra    D7,VECS
  3292.  
  3293.     ifd    copperspeed
  3294.     move.w    #$000,$dff180
  3295.     endc
  3296.  
  3297.     movem.l    (sp)+,d0-d7/a0-a6
  3298.     RTS    
  3299.  
  3300.     endc
  3301.  
  3302. ;rot.baldat    ds.l    64*3*4
  3303.  
  3304.  
  3305. curvec    dc.l    0
  3306. rotpal    dc.l    0
  3307. real:    dc.l    0
  3308.  
  3309. XROT:    dc.w    0    ;aantal graden te roteren om X-as    
  3310. YROT:    dc.w    0    ;aantal graden om Y-as
  3311. ZROT:    dc.w    0    ;aantal om Z-as
  3312. DROT:    dc.w    0
  3313.  
  3314. XV:    dc.w    (rot_wid+rot_cen)*4;    ;centrum xcoord
  3315. YV:    dc.w    (rot_hgt/2)        ;ycoord
  3316.  
  3317. ZV:    dc.w    780        ;zcoord
  3318.  
  3319. xadd    dc.w    0
  3320. yadd    dc.w    0
  3321. zadd    dc.w    0
  3322. dadd    dc.w    0
  3323. dway    dc.w    0
  3324.  
  3325. bufmod    dc.b    0
  3326. clrmod    dc.b    0
  3327.  
  3328.     cnop    0,2
  3329.     ifnd mx68882
  3330. SINCOS:
  3331.   dc.w     0,571,1143,1714,2285,2855,3425,3993
  3332.   dc.w     4560,5125,5689,6252,6812,7370,7927,8480
  3333.   dc.w     9031,9580,10125,10667,11206,11742,12274,12803
  3334.   dc.w     13327,13847,14364,14875,15383,15885,16383,16876
  3335.   dc.w     17363,17846,18323,18794,19259,19719,20173,20620
  3336.   dc.w     21062,21497,21925,22347,22761,23169,23570,23964
  3337.   dc.w     24350,24729,25100,25464,25820,26168,26509,26841
  3338.   dc.w     27165,27480,27788,28086,28377,28658,28931,29195
  3339.   dc.w     29450,29696,29934,30162,30381,30590,30790,30981
  3340.   dc.w     31163,31335,31497,31650,31793,31927,32050,32164
  3341.   dc.w     32269,32363,32448,32522,32587,32642,32687,32722
  3342.   dc.w     32747,32762,32767,32762,32747,32722,32687,32642
  3343.   dc.w     32587,32522,32448,32363,32269,32164,32050,31927
  3344.   dc.w     31793,31650,31497,31335,31163,30981,30790,30590
  3345.  
  3346.   dc.w     30381,30162,29934,29696,29450,29195,28931,28658
  3347.   dc.w     28377,28086,27787,27480,27165,26841,26509,26168
  3348.   dc.w     25820,25464,25100,24729,24350,23964,23570,23169
  3349.   dc.w     22761,22347,21925,21497,21062,20620,20173,19719
  3350.   dc.w     19259,18794,18323,17846,17363,16876,16383,15885
  3351.   dc.w     15383,14875,14364,13848,13327,12803,12274,11742
  3352.   dc.w     11207,10667,10125,9580,9031,8480,7927,7371
  3353.   dc.w     6812,6252,5690,5126,4560,3993,3425,2855
  3354.   dc.w     2285,1715,1143,572,0
  3355.   dc.w    -571,-1143,-1714
  3356.   dc.w    -2285,-2855,-3424,-3993,-4560,-5125,-5689,-6252
  3357.   dc.w    -6812,-7370,-7926,-8480,-9031,-9579,-10125,-10667
  3358.   dc.w    -11206,-11742,-12274,-12802,-13327,-13847,-14363,-14875
  3359.   dc.w    -15382,-15885,-16383,-16876,-17363,-17845,-18322,-18794
  3360.   dc.w    -19259,-19719,-20173,-20620,-21062,-21496,-21925,-22346
  3361.   dc.w    -22761,-23169,-23570,-23964,-24350,-24729,-25100,-25464
  3362.   dc.w    -25820,-26168,-26508,-26840,-27164,-27480,-27787,-28086
  3363.   dc.w    -28376,-28658,-28931,-29195,-29450,-29696,-29933,-30162
  3364.   dc.w    -30380,-30590,-30790,-30981,-31163,-31335,-31497,-31650
  3365.   dc.w    -31793,-31927,-32050,-32164,-32269,-32363,-32448,-32522
  3366.   dc.w    -32587,-32642,-32687,-32722,-32747,-32762,-32767,-32762
  3367.   dc.w    -32747,-32722,-32687,-32642,-32587,-32522,-32448,-32363
  3368.   dc.w    -32269,-32165,-32051,-31927,-31793,-31650,-31497,-31335
  3369.   dc.w    -31163,-30981,-30791,-30590,-30381,-30162,-29934,-29697
  3370.   dc.w    -29451,-29195,-28931,-28658,-28377,-28087,-27788,-27481
  3371.   dc.w    -27165,-26841,-26509,-26169,-25821,-25465,-25101,-24729
  3372.   dc.w    -24351,-23964,-23571,-23170,-22762,-22347,-21925,-21497
  3373.   dc.w    -21062,-20621,-20173,-19720,-19260,-18794,-18323,-17846
  3374.   dc.w    -17364,-16876,-16384,-15886,-15383,-14876,-14364,-13848
  3375.   dc.w    -13328,-12803,-12275,-11743,-11207,-10668,-10126,-9580
  3376.   dc.w    -9032,-8481,-7927,-7371,-6813,-6252,-5690,-5126
  3377.   dc.w    -4560,-3994,-3425,-2856,-2286,-1715,-1144,-572
  3378.   dc.w     0,571,1142,1714,2284,2855,3424,3992
  3379.   dc.w     4559,5125,5689,6251,6811,7370,7926,8479
  3380.   dc.w     9031,9579,10124,10667,11206,11741,12273,12802
  3381.   dc.w     13326,13847,14363,14875,15382,15885,16382,16875
  3382.   dc.w     17363,17845,18322,18793,19259,19718,20172,20620
  3383.   dc.w     21061,21496,21924,22346,22761,23169,23569,23963
  3384.   dc.w     24350,24728,25100,25464,25820,26168,26508,26840
  3385.   dc.w     27164,27480,27787,28086,28376,28658,28931,29195
  3386.   dc.w     29450,29696,29933,30161,30380,30590,30790,30981
  3387.   dc.w     31162,31334,31497,31650,31793,31926,32050,32164
  3388.   dc.w     32269,32363,32447,32522,32587,32642,32687,32722
  3389.   dc.w     32747,32761,32767
  3390.     endc
  3391.  
  3392. rotbaltab    ds.l    64
  3393.  
  3394. xy    ds.l    2*1024        ;x/y/z coordinaten
  3395. rotdontab    ds.l    2*1024        ;is getekend tabel
  3396. mt    ds.l    rot_hgt        ;mulutable (faster)
  3397.  
  3398. ;pic_wid    equ    4        ;wide in bytes
  3399. ;pic_hgt    equ    6        ;hoogte
  3400. ;pic_dpt    equ    8        ;number planes
  3401. ;pic_ani    equ    10        ;aantal effes (anim)
  3402. ;pic_vew    equ    12        ;viewmode
  3403. ;pic_cycstr    equ    14        ;cycle start (*4)
  3404. ;pic_cycend    equ    15        ;cycle end (*4)
  3405. ;pic_cycspd    equ    16        ;cycle speed (*4)
  3406. ;pic_cycadd    equ    17        ;cycle add (*4)
  3407. ;pic_palnum    equ    30        ;aantal kleuren
  3408. ;pic_pal    equ    32        ;palette start
  3409. ;pic_palsiz    equ    256*2        ;vaste palette size
  3410. ;pic_raw    equ    pic_pal+pic_palsiz    ;palette start
  3411.  
  3412.     ;copperlijst in geval van vectorshade
  3413.  
  3414.     ifd    shade
  3415. rotcop
  3416.     dc.w    $0080,$0000,$0082,$0000    ;vt-copper terugspring-adres
  3417.  
  3418.     dc.w    $00e4,$0000,$00e6,$0000
  3419.     dc.w    $00e8,$0000,$00ea,$0000
  3420.     dc.w    $00ec,$0000,$00ee,$0000
  3421.     dc.w    $00f0,$0000,$00f2,$0000
  3422.  
  3423.     dc.w    $0100,$5000
  3424.     dc.w    $0108,rot_wid-vew_wid
  3425.     dc.w    $010a,rot_wid-vew_wid
  3426.  
  3427.     dc.w    $0088,$0000        ;terug naar vt-copper
  3428.     dc.w    $ffff,$fffe
  3429.     endc
  3430.         
  3431.     ;dit zijn de picture-tabellen, 2 voor double buffer
  3432.     ;of 6 voor vectorshade
  3433.  
  3434. rotpic1
  3435.     dc.l    'PICT'
  3436.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  3437.     dc.b    0,0,0,0
  3438.     dc.b    0,0,0,0
  3439.     dc.b    0,0,0,0
  3440.     dc.b    0,0,0,0
  3441.  
  3442.     ifeq    1-rot_dpt
  3443.     ifnd    shade
  3444.     dc.w    2-1
  3445. rotpal1
  3446.     dc.w    $000,$fff
  3447.     ds.w    256-2
  3448.     endc
  3449.     ifd    shade
  3450.     dc.w    32-1
  3451. rotpal1
  3452.     dc.w    $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3453.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3454.     dc.w    $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3455.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3456.     ds.w    256-32
  3457.     endc
  3458.     endc
  3459.     
  3460.     ifeq    2-rot_dpt
  3461.     dc.w    4-1
  3462. rotpal1
  3463.     dc.w    $000,$f0f,$0ff,$fff
  3464. ;    dc.w    $000,$555,$aaa,$fff
  3465.     ds.w    256-4
  3466.     endc
  3467.     
  3468.     ifeq    3-rot_dpt
  3469.     dc.w    8-1
  3470. rotpal1
  3471.     dc.w    $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
  3472. ;    dc.w    $000,$333,$555,$777,$999,$bbb,$ddd,$fff
  3473.     ds.w    256-8
  3474.     endc
  3475.     
  3476.     ifeq    4-rot_dpt
  3477.     dc.w    16-1
  3478. rotpal1
  3479.     dc.w    $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
  3480.     dc.w    $555,$f55,$5f5,$ff5,$55f,$f5f,$5ff,$fff
  3481.  
  3482. ;    dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  3483. ;    dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  3484.     ds.w    256-16
  3485.     endc
  3486.     
  3487.     ifeq    5-rot_dpt
  3488.     dc.w    32-1
  3489. rotpal1
  3490.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  3491.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  3492.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  3493.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  3494.     ds.w    256-32
  3495.     endc
  3496.     
  3497.     ifeq    6-rot_dpt
  3498.     dc.w    32-1
  3499. rotpal1
  3500.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  3501.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  3502.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  3503.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  3504.     ds.w    256-32
  3505.     endc
  3506.     
  3507. rotpln1
  3508.     ds.b    rot_wid*rot_hgt*rot_dpt
  3509.  
  3510.  
  3511.  
  3512. rotpic2
  3513.     dc.l    'PICT'
  3514.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  3515.     dc.b    0,0,0,0
  3516.     dc.b    0,0,0,0
  3517.     dc.b    0,0,0,0
  3518.     dc.b    0,0,0,0
  3519.  
  3520.     ifeq    1-rot_dpt
  3521.     ifnd    shade
  3522.     dc.w    2-1
  3523. rotpal2
  3524.     dc.w    $000,$fff
  3525.     ds.w    256-2
  3526.     endc
  3527.     ifd    shade
  3528.     dc.w    32-1
  3529. rotpal2
  3530.     dc.w    $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3531.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3532.     dc.w    $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3533.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3534.     ds.w    256-32
  3535.     endc
  3536.     endc
  3537.     
  3538.     ifeq    2-rot_dpt
  3539.     dc.w    4-1
  3540. rotpal2
  3541.     dc.w    $000,$f0f,$0ff,$fff
  3542. ;    dc.w    $000,$555,$aaa,$fff
  3543.     ds.w    256-4
  3544.     endc
  3545.     
  3546.     ifeq    3-rot_dpt
  3547.     dc.w    8-1
  3548. rotpal2
  3549.     dc.w    $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
  3550. ;    dc.w    $000,$333,$555,$777,$999,$bbb,$ddd,$fff
  3551.     ds.w    256-8
  3552.     endc
  3553.     
  3554.     ifeq    4-rot_dpt
  3555.     dc.w    16-1
  3556. rotpal2
  3557.     dc.w    $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
  3558.     dc.w    $555,$f55,$5f5,$ff5,$55f,$f5f,$5ff,$fff
  3559.  
  3560. ;    dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  3561. ;    dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  3562.     ds.w    256-16
  3563.     endc
  3564.     
  3565.     ifeq    5-rot_dpt
  3566.     dc.w    32-1
  3567. rotpal2
  3568.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  3569.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  3570.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  3571.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  3572.     ds.w    256-32
  3573.     endc
  3574.     
  3575.     ifeq    6-rot_dpt
  3576.     dc.w    32-1
  3577. rotpal2
  3578.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  3579.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  3580.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  3581.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  3582.     ds.w    256-32
  3583.     endc
  3584.     
  3585. rotpln2
  3586.     ds.b    rot_wid*rot_hgt*rot_dpt
  3587.  
  3588.     ifd    shade
  3589.     dc.l    'PICT'
  3590.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  3591.     dc.b    0,0,0,0
  3592.     dc.b    0,0,0,0
  3593.     dc.b    0,0,0,0
  3594.     dc.b    0,0,0,0
  3595.     dc.w    32-1
  3596.     dc.w    $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3597.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3598.     dc.w    $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3599.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3600.     ds.w    256-32
  3601.     ds.b    rot_wid*rot_hgt*rot_dpt
  3602.     dc.l    'PICT'
  3603.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  3604.     dc.b    0,0,0,0
  3605.     dc.b    0,0,0,0
  3606.     dc.b    0,0,0,0
  3607.     dc.b    0,0,0,0
  3608.     dc.w    32-1
  3609.     dc.w    $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3610.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3611.     dc.w    $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3612.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3613.     ds.w    256-32
  3614.     ds.b    rot_wid*rot_hgt*rot_dpt
  3615.  
  3616.     dc.l    'PICT'
  3617.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  3618.     dc.b    0,0,0,0
  3619.     dc.b    0,0,0,0
  3620.     dc.b    0,0,0,0
  3621.     dc.b    0,0,0,0
  3622.     dc.w    32-1
  3623.     dc.w    $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3624.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3625.     dc.w    $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3626.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3627.     ds.w    256-32
  3628.     ds.b    rot_wid*rot_hgt*rot_dpt
  3629.  
  3630.     dc.l    'PICT'
  3631.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  3632.     dc.b    0,0,0,0
  3633.     dc.b    0,0,0,0
  3634.     dc.b    0,0,0,0
  3635.     dc.b    0,0,0,0
  3636.     dc.w    32-1
  3637.     dc.w    $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3638.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3639.     dc.w    $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3640.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3641.     ds.w    256-32
  3642.     ds.b    rot_wid*rot_hgt*rot_dpt
  3643.  
  3644.  
  3645.     endc
  3646.  
  3647.  
  3648. ;    Section    plane,data_c    
  3649. rotplnw
  3650.     ds.b    rot_wid*rot_hgt    ;work bitplane (filled vectors)
  3651. rotplne
  3652.     ds.b    rot_wid*rot_hgt    ;empty bitplane (filled vectors)
  3653.  
  3654. rot.e
  3655.  
  3656. ;**********************************************************************
  3657.  
  3658. ;and here are the incbin-files....
  3659.  
  3660.         ifd    rout
  3661.         cnop    0,2
  3662. ;        Section    Data,Data_f        ;32-bits fast-mem !
  3663. rottube
  3664.         incbin    'videotracker:Effect/Tube.vec'
  3665.         endc
  3666.         
  3667.